home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / program / inter54b.zip / INTERRUP.E < prev    next >
Text File  |  1997-06-29  |  274KB  |  7,583 lines

  1. Interrupt List, part 5 of 16
  2. Copyright (c) 1989,1990,1991,1992,1993,1994,1995,1996,1997 Ralf Brown
  3. --------X-1AB2-------------------------------
  4. INT 1A - Reserved For PCI
  5.     AH = B2h
  6. --------X-1AB3-------------------------------
  7. INT 1A - Reserved For PCI
  8.     AH = B3h
  9. --------X-1AB400-----------------------------
  10. INT 1A - Intel Plug-and-Play AUTO-CONFIGURATION - INSTALLATION CHECK
  11.     AX = B400h
  12. Return: CF clear if installed
  13.     AX = 0000h if installed
  14.         BH = ACFG major version (02h)
  15.         BL = ACFG minor version (08h)
  16.         CX = ??? (0002h)
  17.         EDX = 47464341h ('GFCA', which is byte-swapped 'ACFG')
  18.         SI = ??? (001Fh)
  19. SeeAlso: AX=B401h,AX=B402h,AX=B403h,AX=B404h,AX=B405h,AX=B406h,AX=B407h
  20. SeeAlso: @xxxxh:xxxxh"Plug-and-Play"
  21.  
  22. (Table 0908)
  23. Values for Intel Plug-and-Play AUTO-CONFIGURATION error codes:
  24.  0000h    successful
  25.  0001h    specified action could not be completed
  26.  0051h    ???
  27.  0055h    unable to read/write configuration table from/to nonvolatile storage
  28.  0056h    not a valid configuration table or wrong table version
  29.  0059h    buffer too small
  30.  0081h    unsupported function
  31.  FFFFh    ???
  32. SeeAlso: #F055
  33. --------X-1AB401-----------------------------
  34. INT 1A - Intel Plug-and-Play AUTO-CONFIGURATION - GET DEFAULT CONFIG TABLE
  35.     AX = B401h
  36. Return: CF clear if successful
  37.         AX = 0000h
  38.         BX = maximum size of configuration table in bytes
  39.         CX = required configuration buffer size
  40.         (includes scratch space used by ACFG code)
  41.         EDI = linear/physical address of ESCD table (see #0909)
  42.     CF set on error
  43.         AX = error code (see #0908)
  44. SeeAlso: AX=B400h,AX=B402h,@xxxxh:xxxxh"Plug-and-Play"
  45.  
  46. Format of Intel Plug-and-Play Extended System Configuration Data table:
  47. Offset    Size    Description    (Table 0909)
  48.  00h    WORD    total length of this table
  49.  02h  4 BYTEs    signature "ACFG"
  50.  06h    BYTE    minor version number
  51.  07h    BYTE    major version number (currently 02h)
  52.  08h    BYTE    number of boards listed in the configuration data
  53.  09h  3 BYTEs    reserved (00h)
  54.  0Ch    var    board data
  55.     WORD    checksum
  56. Notes:    this table contains information about the standard devices in the
  57.       system, such as serial ports, parallel ports, etc.  For each device,
  58.       it includes at least the I/O port address (03F8h,02F8h,0378h,etc).
  59.     the sum of all words in the table, including the checksum field (with
  60.       implied zero padding if the length is odd), must equal 0000h
  61. SeeAlso: #0910
  62.  
  63. Format of Extended System Configuration Data Board Header:
  64. Offset    Size    Description    (Table 0910)
  65.  00h    WORD    length of this header in bytes
  66.  02h    BYTE    slot number
  67.         00h motherboard
  68.         01h-0Fh ISA/EISA
  69.         10h-40h    PCI
  70.  03h    BYTE    reserved (00h)
  71. SeeAlso: #0909,#0911
  72.  
  73. Format of Extended System Configuration Data Freeform Board Header:
  74. Offset    Size    Description    (Table 0911)
  75.  00h  4 BYTEs    signature "ACFG"
  76.  04h    BYTE    minor version number
  77.  05h    BYTE    major version number (currently 02h)
  78.  06h    BYTE    board type
  79.         01h ISA
  80.         02h EISA
  81.         04h PCI
  82.         08h PCMCIA
  83.         10h PnPISA
  84.         20h MCA
  85.  07h    BYTE    reserved (00h)
  86.  08h    WORD    disabled functions (bit N set = function N disabled)
  87.  0Ah    WORD    configuration error functions
  88.  0Ch    WORD    reconfigurable functions (bit N set = function N reconfig'able)
  89.  0Eh  2 BYTEs    reserved (00h)
  90. SeeAlso: #0914,#0915
  91.  
  92. Format of Extended System Configuration Data Freeform PCI Device Data:
  93. Offset    Size    Description    (Table 0912)
  94.  00h    BYTE    PCI bus number
  95.  01h    BYTE    PCI device and function number
  96.  02h    WORD    PCI device identifier
  97.  04h    WORD    PCI vendor ID (see #0649 at INT 1A/AX=B102h)
  98.  06h  2 BYTEs    reserved (00h)
  99. SeeAlso: #0912,#0915
  100.  
  101. Format of Extended System Configuration Data Freeform PnP ISA Board ID:
  102. Offset    Size    Description    (Table 0913)
  103.  00h    DWORD    vendor ID (EISA device identifier)
  104.  04h    DWORD    serial number
  105. SeeAlso: #0913,#0914
  106.  
  107. Format of Extended System Configuration Data PnP ISA ECD Extension Function:
  108. Offset    Size    Description    (Table 0914)
  109.  00h    WORD    001Eh (length of this structure)
  110.  02h    BYTE    01h (selection size)
  111.  03h    BYTE    00h (selection data)
  112.  04h    BYTE    C0h (function information byte) (see #0917)
  113.  05h    BYTE    18h (size of following free-format data)
  114.  06h 16 BYTEs    freeform board header (see #0911)
  115.  16h  8 BYTEs    Plug-and-Play board ID (see #0913)
  116. Note:    ECD = Extended Configuration Data; this structure must be the last
  117.       "function" for a particular ISA Plug-and-Play board
  118. SeeAlso: #0915
  119.  
  120. Format of Extended System Configuration Data PCI ECD Extension Function:
  121. Offset    Size    Description    (Table 0915)
  122.  00h    WORD    length of this structure (at least 001Eh, up to 0056h)
  123.  02h    BYTE    01h (selection size)
  124.  03h    BYTE    00h (selection data)
  125.  04h    BYTE    C0h (function information byte) (see #0917)
  126.  05h    BYTE    size of following free-format data (at least 18h, max 50h)
  127.  06h 16 BYTEs    freeform board header (see #0911)
  128.  16h 8N BYTEs    PCI board ID (see #0912) for one to eight boards
  129. Notes:    ECD = Extended Configuration Data; this structure must be the last
  130.       "function" for a particular PCI board
  131.     AMI BIOS v1.00.05.AX1 sets the length field to 001Ch for entries with
  132.       a single board ID, apparently treating the field as the length of
  133.       the remainder of the structure instead of the full structure's length
  134. SeeAlso: #0914
  135.  
  136. Bitfields for EISA ID and Slot Information:
  137. Bit(s)    Description    (Table 0916)
  138.  3-0    selector among duplicate configuration file names (0000 if no dups)
  139.  5-4    slot type
  140.     00 expansion slot
  141.     01 embedded
  142.     10 virtual slot
  143.     11 reserved
  144.  6    ID is readable
  145.  7    duplicate IDs present
  146.  8    board can be disabled
  147.  9    IOCHKERR supported
  148.  10    board or entries locked
  149.  13-11    reserved
  150.  14    board does not have or need configuration file
  151.  15    configuration not complete
  152. SeeAlso: #0917
  153.  
  154. Bitfields for EISA Function Information:
  155. Bit(s)    Description    (Table 0917)
  156.  0    subtype data
  157.  1    memory information (see #0918)
  158.  2    IRQ information (see #0920)
  159.  3    DMA information (see #0921)
  160.  4    port range information (see #0922)
  161.  5    port initialization data (see #0923)
  162.  6    free form data
  163.  7    function disabled
  164. SeeAlso: #0914,#0915,#0916
  165.  
  166. Format of EISA Memory Information:
  167. Offset    Size    Description    (Table 0918)
  168.  00h    WORD    memory information flags (see #0919)
  169.  02h  3 BYTEs    high 24 bits of memory start address (LSB first)
  170.  05h    WORD    memory size in K (0000h = 65536K)
  171. SeeAlso: #0917
  172.  
  173. Bitfields for EISA Memory Information Flags:
  174. Bit(s)    Description    (Table 0919)
  175.  0    writable (RAM rather than ROM)
  176.  1    cached
  177.  2    write-back cache rather than write-through
  178.  4-3    memory type
  179.     00 system
  180.     01 expantion
  181.     10 virtual
  182.     11 other
  183.  5    shared
  184.  6    reserved (0)
  185.  7    more entries follow
  186.  9-8    memory width
  187.     00 byte
  188.     01 word
  189.     10 dword
  190.     11 reserved
  191.  11-10    decoded address lines
  192.     00 = 20
  193.     01 = 24
  194.     10 = 32
  195.     11 reserved
  196.  15-12    reserved (0)
  197. SeeAlso: #0918
  198.  
  199. Bitfields for EISA IRQ Information:
  200. Bit(s)    Description    (Table 0920)
  201.  3-0    IRQ number
  202.  4    reserved (0)
  203.  5    IRQ triggering (0 = edge, 1 = level)
  204.  6    IRQ is shareable
  205.  7    more entries follow
  206.  15-8    reserved (0)
  207. SeeAlso: #0917
  208.  
  209. Bitfields for EISA DMA Information:
  210. Bit(s)    Description    (Table 0921)
  211.  2-0    DMA channel number
  212.  5-3    reserved (0)
  213.  6    shareable
  214.  7    more entries follow
  215.  9-8    reserved
  216.  11-10    DMA transfer size
  217.     00 byte
  218.     01 word
  219.     10 dword
  220.     11 word, but count in bytes
  221.  13-12    DMA timing
  222.     00 ISA-compatible
  223.     01 EISA type "A"
  224.     10 EISA type "B"
  225.     11 EISA type "C"/"F" (burst)
  226.  15-14    reserved (0)
  227. SeeAlso: #0917
  228.  
  229. Format of EISA Port Range Information:
  230. Offset    Size    Description    (Table 0922)
  231.  00h    BYTE    port description
  232.         bits 4-0: number of sequential ports
  233.         bit 5 reserved (0)
  234.         bit 6: shareable
  235.         bit 7: more entries follow
  236.  01h    WORD    I/O port address
  237. SeeAlso: #0917,#0923
  238.  
  239. Format of EISA Port Initialization Data:
  240. Offset    Size    Description    (Table 0923)
  241.  00h    BYTE    flags
  242.         bits 1-0: port size
  243.             00 byte
  244.             01 word
  245.             10 dword
  246.             11 reserved
  247.         bit 2: masked write
  248.         bits 6-3 reserved (0)
  249.         bit 7: more entries follow
  250.  01h    ???
  251. SeeAlso: #0917,#0922
  252. --------X-1AB402-----------------------------
  253. INT 1A - Intel Plug-and-Play AUTO-CONFIGURATION - COPY AND VERIFY CONFIG TABLE
  254.     AX = B402h
  255.     DS:SI -> configuration table (see #0909)
  256.     ES:DI -> buffer for copy of configuration table
  257. Return: CF clear if successful
  258.         AX = 0000h
  259.     CF set on error
  260.         AX = error code (0055h,0056h) (see #0908)
  261. Note:    the buffer pointed at by ES:DI must be at least as large as the
  262.       maximum configuration table size reported by AX=B401h
  263. SeeAlso: AX=B400h,AX=B401h,AX=B403h
  264. --------X-1AB403-----------------------------
  265. INT 1A - Intel Plug-and-Play AUTO-CONFIGURATION - STORE ESCD TABLE IN NVRAM
  266.     AX = B403h
  267.     DS:SI -> configuration table (see #0909)
  268. Return: CF clear if successful
  269.         AX = 0000h
  270.     CF set on error
  271.         AX = error code (0055h) (see #0908)
  272. Note:    sets the configuration table's checksum field, then copies the table
  273.       into nonvolatile storage (i.e. FlashROM)
  274. SeeAlso: AX=B400h,AX=B402h
  275. --------X-1AB404-----------------------------
  276. INT 1A - Intel Plug-and-Play AUTO-CONFIGURATION - GET AVAILABLE IRQs???
  277.     AX = B404h
  278.     BX = bitmap of IRQs being used???
  279. Return: CF clear if successful
  280.         AX = 0000h
  281.         BX = available for ISA??? (not(BXin) & A127h)
  282.         CX = available for on-board I/O??? (not(BXin) & 40D8h)
  283.         DX = available for PCI??? (either not(BXin) & 0E00h or 0000h)
  284.     CF set on error
  285.         AX = error code (0051h) (see #0908)
  286. Note:    the various vector types have also been called "shareable",
  287.       "unshareable", and "avoidable"
  288. SeeAlso: AX=B400h,INT 2F/AX=1684h/BX=304Ch
  289. --------X-1AB405-----------------------------
  290. INT 1A - Intel Plug-and-Play AUTO-CONFIGURATION - GET ???
  291.     AX = B405h
  292. Return: AX = ??? (0008h)
  293. SeeAlso: AX=B400h
  294. --------X-1AB406-----------------------------
  295. INT 1A - Intel Plug-and-Play AUTO-CONFIGURATION - GET PCI IRQ ROUTING TABLE
  296.     AX = B406h
  297.     ES:DI -> IRQ routing table header (see #0924)
  298. Return: CF clear if successful
  299.         AX = 0000h
  300.         WORD ES:[DI] = size of returned data
  301.     CF set on error
  302.         AX = error code (0059h) (see #0908)
  303.         WORD ES:[DI] = required size of buffer
  304. SeeAlso: AX=B400h,AX=B404h,AX=B10Eh,INT 2F/AX=1684h/BX=304Ch
  305.  
  306. Format of Intel Plug-and-Play AUTO-CONFIGURATION PCI IRQ routing header:
  307. Offset    Size    Description    (Table 0924)
  308.  00h    WORD    length of IRQ routing table buffer
  309.  02h    DWORD    -> IRQ routing table array buffer (see #0925)
  310.  
  311. Format of Intel Plug-and-Play ACFG PCI IRQ routing table entry [array]:
  312. Offset    Size    Description    (Table 0925)
  313.  00h    BYTE    PCI bus number
  314.  01h    BYTE    PCI device number (bits 7-3)
  315.  02h    BYTE    link value for INTA#
  316.         (if non-zero, wire-ORed together with any other PCI interrupts
  317.           with same link value)
  318.  03h    WORD    IRQ connectivity bit map for INTA#
  319.         (standard AT IRQs to which PCI interrupt can be routed)
  320.  05h    BYTE    link value for INTB#
  321.  06h    WORD    IRQ connectivity bit map for INTB#
  322.  08h    BYTE    link value for INTC#
  323.  09h    WORD    IRQ connectivity bit map for INTC#
  324.  0Bh    BYTE    link value for INTD#
  325.  0Ch    WORD    IRQ connectivity bit map for INTD#
  326.  0Eh    BYTE    (PCI BIOS v2.1+) device slot number (00h = motherboard)
  327.  0Fh    BYTE    reserved
  328. Note:    each item in the routing table corresponds to a motherboard PCI
  329.       device or PCI slot
  330. SeeAlso: #0924,#M085
  331. --------X-1AB407-----------------------------
  332. INT 1A - Intel Plug-and-Play AUTO-CONFIGURATION - ???
  333.     AX = B407h
  334.     EDX = length of ???
  335.     EDI = physical address of ???
  336. Return: CF clear if successful
  337.         AX = 0000h
  338.         EDX = ???
  339.         EDI = ???
  340.     CF set on error
  341.         AX = error code (FFFFh) (see #0908)
  342. Notes:    returns error if EDI < 000C0000h or EDI+EDX > 00100000h
  343.     seems to force EDI and EDX to align to 16K boundaries
  344. SeeAlso: AX=B400h
  345. --------X-1AB4-------------------------------
  346. INT 1A - Intel Plug-and-Play AUTO-CONFIGURATION - 32-BIT API
  347.     AH = B4h
  348.     AL = function (80h-87h)
  349.     further details not yet available
  350. Note:    these functions are 32-bit versions of functions 00h-07h
  351. --------c-1AC0-------------------------------
  352. INT 1A U - Disk Spool II v2.07+ - ALTERNATE INSTALLATION CHECK
  353.     AH = C0h
  354. Return: (see AH=A0h)
  355. Notes:    this call is identical to AH=A0h
  356.     this function is also supported by Vertisoft's Emulaser utility ELSPL,
  357.       as that is a licensed version of Disk Spool II
  358. SeeAlso: AH=A0h,AH=ABh,AH=D0h
  359. --------U-1ACCCCBXCCCC-----------------------
  360. INT 1A U - DATEFIX - INSTALLATION CHECK
  361.     AX = CCCCh
  362.     BX = CCCCh
  363.     CX = 0000h
  364. Return: CX = CCCCh if installed
  365.         ES:BX -> original interrupt handler
  366. Program: DATEFIX is a public-domain TSR to correct the date on AT&T 6300
  367.       machines, where the realtime clock's calendar wraps after 1991
  368. SeeAlso: AH=FEh,AH=FFh"AT&T"
  369. --------c-1AD0-------------------------------
  370. INT 1A U - Disk Spool II v2.07+ - FUNCTION CALLS
  371.     AH = D0h
  372.     AL = function code
  373.         01h enable spooler and despooler
  374.         02h enable spooler only
  375.         03h enable despooler at beginning of file
  376.         04h disable the despooler
  377.         05h disable the despooler and spooler
  378.         06h clear the spool file
  379.         08h inhibit the popup menu
  380.         09h enable the popup menu
  381.         0Ah ??? (called by Disk Spool's INT 21 handler)
  382.         0Bh disable the spooler
  383.         0Ch start despooler after last successfully printed document
  384.         0Dh start despooler at the exact point where it last left off
  385.         0Eh pop up the menu
  386.         0Fh ???
  387.         11h start new spool file??? (called by Disk Spool's INT 21 handler
  388.             when a program terminates)
  389.         14h ???
  390.         15h delete despool file and reset ???
  391.         16h ??? (writes something to unknown file)
  392.         17h ??? (writes something to despool file, then reads something
  393.             else and ???)
  394.         18h ??? (reads something from despool file, and then ???)
  395.         19h ??? (creates/truncates spool file)
  396.         20h clear file pointed to by the despooler
  397.         21h ??? (writes something to unknown file)
  398.         22h ??? (writes something to spool file if spooler/despooler using
  399.             same file)
  400.         23h ??? (opens/creates unknown file, then ???)
  401.         30h ???
  402.         31h ???
  403.         32h beep
  404.         33h append CRLF to spool file???
  405.         34h ???
  406.         35h ???
  407.         36h ???
  408.         37h append CRLF to spool file and start a new spool file???
  409.         38h ???
  410.         40h ??? (v4.05)
  411.         41h ??? (v4.05)
  412.         51h ??? (called by Disk Spool's INT 21 handler)
  413.         52h ??? (called by Disk Spool's INT 21 handler)
  414.         57h ???
  415.         5Ah ??? (v4.05)
  416.         5Bh ??? (v4.05)
  417.         5Ch ??? (v4.05)
  418. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  419.       as that is a licensed version of Disk Spool II
  420. SeeAlso: AH=A0h,AH=ADh
  421. --------c-1AE0-------------------------------
  422. INT 1A - Disk Spool II v4.0x - ENABLE/DISABLE
  423.     AH = E0h
  424.     AL = subfunction
  425.         01h enable spooler
  426.         02h disable spooler
  427.         03h enable despooler
  428.         04h disable despooler
  429.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  430. Return: AH = status
  431.         00h successful
  432.         F0h printer port not managed by Disk Spool II
  433.         FFH failed
  434. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  435.       as that is a licensed version of Disk Spool II
  436. SeeAlso: AH=A0h,AH=E1h,AX=E301h,AX=E401h
  437. --------c-1AE1-------------------------------
  438. INT 1A - Disk Spool II v4.0x - GET STATUS
  439.     AH = E1h
  440.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  441. Return: AH = status
  442.         00h successful
  443.         CL = despooler state (00h disabled, 41h enabled)
  444.         CH = spooler state (00h disabled, 41h enabled)
  445.         DL = despooler activity (00h standing by, 41h printing)
  446.         ES:BX -> ASCIZ name of current spool file (or next if AutoSpool
  447.             or AutoDespool enabled)
  448.         ES:SI -> ASCIZ name of current despool file
  449.         ES:DI -> 3-byte file extension used by Disk Spool II
  450.         F0h printer port not managed by Disk Spool II
  451. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  452.       as that is a licensed version of Disk Spool II
  453. SeeAlso: AH=A0h,AH=E0h,AH=E2h
  454. --------U-1AE11B-----------------------------
  455. INT 1A - TheGrab v4.60 - ???
  456.     AX = E11Bh
  457.     ???
  458. Return: ??? (may destroy all registers)
  459. SeeAlso: AX=E11Dh
  460. --------U-1AE11D-----------------------------
  461. INT 1A - TheGrab v4.60 - INSTALLATION CHECK
  462.     AX = E11Dh
  463. Return: ES:DI -> signature block (see #0926) if installed
  464.         CX = length of signature block (000Fh)
  465. Program: TheGrab is a resident ANSI screen grabber bundled with TheDraw
  466. SeeAlso: AX=E11Bh
  467.  
  468. Format of TheGrab signature block:
  469. Offset    Size    Description    (Table 0926)
  470.  00h    BYTE    08h
  471.  01h  8 BYTEs    ASCIZ "THEGRAB"
  472.  09h  6 BYTEs    ??? (zeros)
  473. --------c-1AE2-------------------------------
  474. INT 1A - Disk Spool II v4.0x - GET SPOOL FILES
  475.     AH = E2h
  476.     AL = which
  477.         01h first
  478.         02h next (can only call after "first")
  479.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  480. Return: AH = status
  481.         00h successful
  482.         ES:BX -> ASCIZ filename
  483.         F0h no (more) spool files
  484.         FFh failed
  485. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  486.       as that is a licensed version of Disk Spool II
  487. SeeAlso: AH=E0h,AH=E1h
  488. --------c-1AE301-----------------------------
  489. INT 1A - Disk Spool II v4.0x - GET SPOOL FILE STATUS
  490.     AX = E301h
  491.     ES:BX -> ASCIZ filename (max 32 chars)
  492. Return: AH = status
  493.         00h successful
  494.         ES:SI -> spool file status record (see #0927)
  495.         F0h not a spool file
  496.         FFh failed
  497. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  498.       as that is a licensed version of Disk Spool II
  499. SeeAlso: AH=E0h,AX=E302h,AX=E401h
  500.  
  501. Format of Disk Spool II spool file status record:
  502. Offset    Size    Description    (Table 0927)
  503.  00h    BYTE    hour of creation or last update
  504.  01h    BYTE    minute of creation or last update
  505.  02h    BYTE    year-1980 of creation or last update
  506.  03h    BYTE    month of creation or last update
  507.  04h    BYTE    day of creation or last update
  508.  05h    BYTE    total number of copies to print
  509.  06h    BYTE    number of copies already printed
  510.  07h    BYTE    printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  511.  08h    BYTE    save status (00h delete after printing, 01h save)
  512.  09h    BYTE    file status
  513.         01h done printing, but being saved
  514.         02h on hold
  515.         03h queued for printing
  516.         04h being spooled
  517.         05h being despooled (i.e. printed)
  518.  0Ah 16 BYTEs    ASCIZ description
  519.  1Ah  2 WORDs    file size in bytes (high,low)
  520.  1Eh  2 WORDs    bytes left to print (high,low)
  521. --------c-1AE302-----------------------------
  522. INT 1A - Disk Spool II v4.0x - UPDATE SPOOL FILE
  523.     AX = E302h
  524.     ES:BX -> ASCIZ filename (max 32 chars)
  525.     ES:SI -> spool file status record (see #0927)
  526. Return: AH = status
  527.         00h successful
  528.         F0h not a spool file
  529.         FFh failed
  530. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  531.       as that is a licensed version of Disk Spool II
  532. SeeAlso: AH=E0h,AX=E301h,AX=E401h
  533. --------c-1AE401-----------------------------
  534. INT 1A - Disk Spool II v4.0x - SPOOL EXISTING FILE
  535.     AX = E401h
  536.     ES:BX -> ASCIZ filename (max 32 chars)
  537.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  538. Return: AH = status
  539.         00h successful
  540.         FFh failed
  541. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  542.       as that is a licensed version of Disk Spool II
  543. SeeAlso: AH=E1h,AX=E302h,AX=E402h
  544. --------c-1AE402-----------------------------
  545. INT 1A U - Disk Spool II v4.0x - SPOOL EXISTING FILE???
  546.     AX = E402h
  547.     ES:BX -> ASCIZ filename (max 32 chars)
  548.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  549. Return: AH = status
  550.         00h successful
  551.         FFh failed
  552. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  553.       as that is a licensed version of Disk Spool II
  554. SeeAlso: AH=E1h,AX=E302h,AX=E401h
  555. --------c-1AE5-------------------------------
  556. INT 1A U - Emulaser ELSPL.COM - ???
  557.     AH = E5h
  558.     ???
  559. Return: ???
  560. Program: ELSPL.COM is a licensed version of Disk Spool II which is distributed
  561.       as part of Vertisoft's Emulaser PostScript emulator
  562. SeeAlso: AH=A0h,INT 17/AH=03h
  563. --------c-1AEE-------------------------------
  564. INT 1A U - Disk Spool II v4.05 - ???
  565.     AH = EEh
  566.     AL = printer port???
  567.     ???
  568. Return: ???
  569. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  570.       as that is a licensed version of Disk Spool II
  571. SeeAlso: AH=E1h
  572. --------U-1AF7-------------------------------
  573. INT 1A - RighTime v1.1 - TEMPORARILY DISABLE
  574.     AH = F7h
  575. Program: RighTime is a TSR by G.T. Becker which continuously adjusts the
  576.       system time to correct for clock drift
  577. Note:    any AH value from F0h-F7h or F9h-FEh will perform this function in
  578.       version 1.1, but F7h is the function called by transient portion
  579. SeeAlso: AH=F8h,AH=FFh"RighTime"
  580. --------U-1AF8-------------------------------
  581. INT 1A - RighTime v1.1 - ENABLE
  582.     AH = F8h
  583. Program: RighTime is a TSR by G.T. Becker which continuously adjusts the
  584.       system time to correct for clock drift
  585. Note:    RighTime is TeSseRact-compatible (see INT 2F/AX=5453h) and modifies its
  586.       TeSseRact program identifier based on its current state: "RighTime"
  587.       when enabled, "RighTim"F7h when disabled.
  588. SeeAlso: AH=F7h,AH=FFh"RighTime"
  589. --------b-1AFE-------------------------------
  590. INT 1A - AT&T 6300 - READ TIME AND DATE
  591.     AH = FEh
  592. Return: BX = day count (0 = Jan 1, 1984)
  593.     CH = hour
  594.     CL = minute
  595.     DH = second
  596.     DL = hundredths
  597. SeeAlso: AX=CCCCh/BX=CCCCh,AH=FFh"AT&T",INT 21/AH=2Ah,INT 21/AH=2Ch
  598. --------b-1AFF-------------------------------
  599. INT 1A - AT&T 6300 - SET TIME AND DATE
  600.     AH = FFh
  601.     BX = day count (0 = Jan 1, 1984)
  602.     CH = hour
  603.     CL = minute
  604.     DH = second
  605.     DL = hundredths
  606. Return: ???
  607. SeeAlso: AX=CCCCh/BX=CCCCh,AH=FEh,INT 21/AH=2Bh"DATE",INT 21/AH=2Dh
  608. --------U-1AFF-------------------------------
  609. INT 1A - RighTime v1.1 - PERMANENTLY DISABLE
  610.     AH = FFh
  611. Program: RighTime is a TSR by G.T. Becker which continuously adjusts the
  612.       system time to correct for clock drift
  613. Note:    upon being permanently disabled, RighTime closes the file handle
  614.       referencing its executable (which is updated with time correction
  615.       information every two minutes while RighTime is enabled).
  616. --------s-1AFF00-----------------------------
  617. INT 1A - SND - INSTALLATION CHECK???
  618.     AX = FF00h
  619. Return: AL = version??? (02h)
  620.     AH = busy flag (00h if not in a SND call, 01h if SND currently active)
  621. Note:    the SND API is also supported by IC (Internal Commands) v2.0, a
  622.       shareware TSR by Geoff Friesen which extends COMMAND.COM's internal
  623.       command set
  624. SeeAlso: AX=FF01h,AX=FF02h,AX=FF04h,AX=FF05h
  625. --------s-1AFF01-----------------------------
  626. INT 1A - SND - PAUSE
  627.     AX = FF01h
  628.     DX = number of clock ticks to delay
  629. Return: AH = status
  630.         00h successful
  631.         01h SND busy
  632. Notes:    if successful, execution returns to the caller after the delay expires;
  633.       if SND is busy, execution returns immediately
  634.     the IC v2.0 implementation of this API makes no special allowance for
  635.       time rollover at midnight, which can cause the delay to be over one
  636.       hour if this function is called just before the BIOS time count
  637.       rolls over and the delay extends into the next day
  638. SeeAlso: AX=FF00h,INT 15/AH=86h,INT 62/AX=0096h,INT 7F/AH=E8h,INT 80/BX=0009h
  639. SeeAlso: INT E0/CL=BDh
  640. --------s-1AFF02-----------------------------
  641. INT 1A - SND - START SOUND
  642.     AX = FF02h
  643.     DX = frequency in Hertz (14h-FFFFh)
  644. Return: AH = status
  645.         00h successful
  646.         01h SND busy
  647. SeeAlso: AX=FF00h,AX=FF01h,AX=FF03h
  648. --------s-1AFF03-----------------------------
  649. INT 1A - SND - STOP SOUND
  650.     AX = FF03h
  651. Return: AH = status
  652.         00h successful
  653.         01h busy
  654. Note:    turns off any sound currently being emitted by the PC's speaker unless
  655.       SND is currently busy processing an API call (this includes
  656.       background music).  Use AX=FF05h to stop the sound even if an API
  657.       call is in progress.
  658. SeeAlso: AX=FF00h,AX=FF02h,AX=FF05h
  659. --------s-1AFF04-----------------------------
  660. INT 1A - SND - PLAY MUSIC STRING IN BACKGROUND
  661.     AX = FF04h
  662.     DS:DX -> ASCIZ music string
  663. Return: AH = status
  664.         00h successful (music begins playing in background)
  665.         01h busy
  666. Note:    the music string accepted by SND is not the same as that accepted by
  667.       BASIC and other programs which process music strings
  668. SeeAlso: AX=FF00h,AX=FF05h,INT 80/BX=0006h
  669. --------s-1AFF05-----------------------------
  670. INT 1A - SND - UNCONDITIONALLY STOP SOUND
  671.     AX = FF05h
  672. Return: AH = 00h (successful)
  673. Note:    this function is the same as AX=FF03h, but will stop the sound even if
  674.       SND is currently busy, such as playing background music
  675. SeeAlso: AX=FF00h,AX=FF03h,INT 80/BX=0007h
  676. --------B-1B---------------------------------
  677. INT 1B C - KEYBOARD - CONTROL-BREAK HANDLER
  678. Desc:    this interrupt is automatically called when INT 09 determines that
  679.       Control-Break has been pressed
  680. Note:    normally points to a short routine in DOS which sets the Ctrl-C flag,
  681.       thus invoking INT 23h the next time DOS checks for Ctrl-C.
  682. SeeAlso: INT 23
  683. --------B-1C---------------------------------
  684. INT 1C - TIME - SYSTEM TIMER TICK
  685. Desc:    this interrupt is automatically called on each clock tick by the INT 08
  686.       handler
  687. Notes:    this is the preferred interrupt to chain when a program needs to be
  688.       invoked regularly
  689.     not available on NEC 9800-series PCs
  690. SeeAlso: INT 08,INT E2"PC Cluster"
  691. --------B-1D---------------------------------
  692. INT 1D - SYSTEM DATA - VIDEO PARAMETER TABLES
  693. Note:    the default parameter table (see #0928) is located at F000h:F0A4h for
  694.       100% compatible BIOSes
  695. SeeAlso: INT 10/AH=00h
  696.  
  697. Format of video parameters:
  698. Offset    Size    Description    (Table 0928)
  699.  00h 16 BYTEs    6845 register values for modes 00h and 01h
  700.  10h 16 BYTEs    6845 register values for modes 02h and 03h
  701.  20h 16 BYTEs    6845 register values for modes 04h and 05h
  702.  30h 16 BYTEs    6845 register values for modes 06h and 07h
  703.  40h    WORD    bytes in video buffer for modes 00h and 01h (0800h)
  704.  42h    WORD    bytes in video buffer for modes 02h and 03h (1000h)
  705.  44h    WORD    bytes in video buffer for modes 04h and 05h (4000h)
  706.  46h    WORD    bytes in video buffer for mode 06h (4000h)
  707.  48h  8 BYTEs    columns on screen for each of modes 00h through 07h
  708.  50h  8 BYTEs    CRT controller mode bytes for each of modes 00h through 07h
  709. Note:    QEMM v7.5 Stealth appears to copy only the first 40h bytes of this
  710.       table into always-accessible memory
  711. --------B-1E---------------------------------
  712. INT 1E - SYSTEM DATA - DISKETTE PARAMETERS
  713. Notes:    the default parameter table (see #0929) is located at F000h:EFC7h for
  714.       100% compatible BIOSes
  715.     if the table is changed, INT 13/AH=00h should be called to ensure that
  716.       the floppy-disk controller is appropriately reprogrammed
  717. SeeAlso: INT 13/AH=0Fh,INT 41"HARD DISK 0",INT 4D/AH=0Ah
  718.  
  719. Format of diskette parameter table:
  720. Offset    Size    Description    (Table 0929)
  721.  00h    BYTE    first specify byte
  722.         bits 7-4: step rate (Fh=2ms,Eh=4ms,Dh=6ms,etc.)
  723.         bits 3-0: head unload time (0Fh = 240 ms)
  724.  01h    BYTE    second specify byte
  725.         bits 7-1: head load time (01h = 4 ms)
  726.         bit    0: non-DMA mode (always 0)
  727.  02h    BYTE    delay until motor turned off (in clock ticks)
  728.  03h    BYTE    bytes per sector (00h = 128, 01h = 256, 02h = 512, 03h = 1024)
  729.  04h    BYTE    sectors per track
  730.  05h    BYTE    length of gap between sectors (2Ah for 5.25", 1Bh for 3.5")
  731.  06h    BYTE    data length (ignored if bytes-per-sector field nonzero)
  732.  07h    BYTE    gap length when formatting (50h for 5.25", 6Ch for 3.5")
  733.  08h    BYTE    format filler byte (default F6h)
  734.  09h    BYTE    head settle time in milliseconds
  735.  0Ah    BYTE    motor start time in 1/8 seconds
  736. ---IBM SurePath BIOS---
  737.  0Bh    BYTE    maximum track number
  738.  0Ch    BYTE    data transfer rate
  739.  0Dh    BYTE    drive type in CMOS
  740. SeeAlso: #2858 at INT 4D/AH=09h
  741. --------B-1F---------------------------------
  742. INT 1F - SYSTEM DATA - 8x8 GRAPHICS FONT
  743. Desc:    this vector points at 1024 bytes of graphics data, 8 bytes for each
  744.       character 80h-FFh
  745. Note:    graphics data for characters 00h-7Fh stored at F000h:FA6Eh in 100%
  746.       compatible BIOSes
  747. SeeAlso: INT 10/AX=5000h,INT 43
  748. --------b-1F12-------------------------------
  749. INT 1F U - C&T "SuperState" BIOS - POWER OFF
  750.     AH = 12h
  751. Return: none
  752. Note:    POWER OFF
  753. --------b-1F17-------------------------------
  754. INT 1F U - C&T "SuperState" BIOS - EXECUTE FAR PROC ROUTINE ON SuperState
  755.     AH = 17h
  756.     ES:DI -> far procedure
  757. Return: all registers except AH,ES,DI
  758. Note:    You can change the BIOS area (F000h:0000h - F000h:FFFFh) only through
  759.       this function
  760. --------b-1F19-------------------------------
  761. INT 1F U - C&T "SuperState" BIOS - ENABLE AUTO WAKEUP AND SET TIME AND DATE
  762.     AH = 19h
  763.     AL = hour in BCD
  764.     BH = minutes in BCD
  765.     BL = seconds in BCD
  766.     CH = year century in BCD (must be 19h)
  767.     CL = year low in BCD
  768.     DH = month in BCD
  769.     DL = date in BCD
  770. Return: CF clear
  771. --------b-1F1C-------------------------------
  772. INT 1F U - C&T "SuperState" BIOS - SET SUSPEND TIMEOUT
  773.     AH = 1Ch
  774.     BX = sec until suspend starts
  775. Return: None
  776. --------b-1F1D-------------------------------
  777. INT 1F U - C&T "SuperState" BIOS - SET SLEEP TIMEOUT
  778.     AH = 1Dh
  779.     BX = sec until sleep starts
  780. Return: None
  781. --------J-1F90-------------------------------
  782. INT 1F - NEC PC-9801 - COPY EXTENDED MEMORY
  783.     AH = 90h
  784.     ES:BX -> global descriptor table (see #0418 at INT 15/AH=87h)
  785.     CX = number of bytes to copy
  786.     SI = 0000h
  787.     DI = 0000h
  788. Return: CF clear if successful
  789.     CF set on error
  790.     ???
  791. SeeAlso: INT 15/AH=87h
  792. --------b-1FF5--BLFA-------------------------
  793. INT 1F U - C&T "SuperState" BIOS - REQUEST PASSWORD INPUT
  794.     AH = F5h
  795.     BL = FAh
  796. Return: none
  797. Note:    this function will not return until the correct password is entered
  798. SeeAlso: AH=F5h/BL=FDh,AH=F5h/BL=FEh
  799. --------b-1FF5--BLFD-------------------------
  800. INT 1F U - C&T "SuperState" BIOS - ENCRYPT PASSWORD
  801.     AH = F5h
  802.     BL = FDh
  803.     CX:SI = input string
  804.     DX:DI = encrypted string
  805.     BH = length of input string
  806. Return: CF set on error
  807. SeeAlso: AH=F5h/BL=FAh,AH=F5h/BL=FEh
  808. --------b-1FF5--BLFE-------------------------
  809. INT 1F U - C&T "SuperState" BIOS - SET PASSWORD
  810.     AH = F5h
  811.     BL = FEh
  812.     CX:SI -> input string
  813.     BH = length of input string (if BH = 00h, clear password)
  814. Return: CF set on error
  815. Note:    the input string must be encrypted by INT 1Fh/AH=F5h/BL=FDh
  816. SeeAlso: AH=F5h/BL=FDh,AH=F5h/BL=FFh
  817. --------b-1FF5--BLFF-------------------------
  818. INT 1F U - C&T "SuperState" BIOS - GET ENCRYPTED PASSWORD
  819.     AH = F5h
  820.     BL = FFh
  821.     DX:DI = string buffer
  822. Return: CF set on error
  823.     CF clear if successful
  824.         BH = length of input string (if BH = 00h, password is not valid)
  825.         DX:DI -> encrypted password string
  826. SeeAlso: AH=F5h/BL=FDh,AH=F5h/BL=FEh
  827. --------b-1FFB-------------------------------
  828. INT 1F U - C&T "SuperState" BIOS - GET/SET CPU SPEED
  829.     AH = FBh
  830.     BL = function
  831.         00h get CPU speed
  832.         Return: AL = current CPU speed (00h = fast, 01h = slow)
  833.         01h set CPU speed
  834.         AL = new CPU speed (00h = fast, 01h = slow)
  835. SeeAlso: AH=FCh/BL=00h
  836. --------b-1FFC--BL00-------------------------
  837. INT 1F U - C&T "SuperState" BIOS - GET ALARM STATUS
  838.     AH = FCh
  839.     BL = 00h
  840. Return: AL = current alarm state (00h = disabled, 01h = enabled)
  841. SeeAlso: AH=FCh/BL=01h,AH=FCh/BL=02h
  842. --------b-1FFC--BL01-------------------------
  843. INT 1F U - C&T "SuperState" BIOS - SET ALARM STATUS
  844.     AH = FCh
  845.     BL = 01h
  846.     AL = new alarm state (00h = disabled, 01h = enabled)
  847. SeeAlso: AH=FCh/BL=00h,AH=FCh/BL=03h
  848. --------b-1FFC--BL02-------------------------
  849. INT 1F U - C&T "SuperState" BIOS - GET ALARM TIME
  850.     AH = FCh
  851.     BL = 02h
  852. Return: CH = hour by BCD
  853.     CL = min by BCD
  854.     DH = sec by BCD
  855. SeeAlso: AH=FCh/BL=00h,AH=FCh/BL=03h,AH=FCh/BL=04h
  856. --------b-1FFC--BL03-------------------------
  857. INT 1F U - C&T "SuperState" BIOS - SET ALARM TIME
  858.     AH = FCh
  859.     BL = 03h
  860.     CH = hour by BCD
  861.     CL = min by BCD
  862.     DH = sec by BCD
  863. Return: CF set on error (incorrect time format or Alarm is not enable)
  864. SeeAlso: AH=FCh/BL=01h,AH=FCh/BL=02h,AH=FCh/BL=05h
  865. --------b-1FFC--BL04-------------------------
  866. INT 1F U - C&T "SuperState" BIOS - GET ALARM DATE
  867.     AH = FCh
  868.     BL = 04h
  869. Return: CH = year century by BCD
  870.     CL = year low by BCD
  871.     DH = month by BCD
  872.     DL = date by BCD
  873. SeeAlso: AH=FCh/BL=02h,AH=FCh/BL=05h
  874. --------b-1FFC--BL05-------------------------
  875. INT 1F U - C&T "SuperState" BIOS - SET ALARM DATE
  876.     AH = FCh
  877.     BL = 05h
  878.     CH = year century by BCD
  879.     CL = year low by BCD
  880.     DH = month by BCD
  881.     DL = date by BCD
  882. Return: CF set on error (incorrect date format or Alarm is not enable)
  883. SeeAlso: AH=FCh/BL=03h,AH=FCh/BL=04h
  884. --------b-1FFD--BL00-------------------------
  885. INT 1F U - C&T "SuperState" BIOS - GET AUTO WAKE UP STATUS
  886.     AH = FDh
  887.     BL = 00h
  888. Return: AL = current wake-up state (00h = disabled, 01h = enabled)
  889. SeeAlso: AH=FDh/BL=01h,AH=FDh/BL=02h
  890. --------b-1FFD--BL01-------------------------
  891. INT 1F U - C&T "SuperState" BIOS - SET AUTO WAKE UP STATUS
  892.     AH = FDh
  893.     BL = 01h
  894.     AL = new wake-up state (00h = disabled, 01h = enabled)
  895. SeeAlso: AH=FDh/BL=00h,AH=FDh/BL=03h
  896. --------b-1FFD--BL02-------------------------
  897. INT 1F U - C&T "SuperState" BIOS - GET AUTO WAKE UP TIME
  898.     AH = FDh
  899.     BL = 02h
  900. Return: CH = hour by BCD
  901.     CL = min by BCD
  902.     DH = sec by BCD
  903. SeeAlso: AH=FDh/BL=00h,AH=FDh/BL=03h
  904. --------b-1FFD--BL03-------------------------
  905. INT 1F U - C&T "SuperState" BIOS - SET AUTO WAKE UP TIME
  906.        AH = FDh
  907.        BL = 03h
  908.        CH = hour by BCD
  909.        CL = min by BCD
  910.        DH = sec by BCD
  911. Return: CF set on error (incorrect Time format or Auto Wake up is not enable)
  912. SeeAlso: AH=FDh/BL=01h,AH=FDh/BL=02h
  913. --------b-1FFD--BL04-------------------------
  914. INT 1F U - C&T "SuperState" BIOS - GET AUTO WAKE UP DATE
  915.     AH = FDh
  916.     BL = 04h
  917. Return: CH = year century in BCD
  918.     CL = year low in BCD
  919.     DH = month in BCD
  920.     DL = date in BCD
  921. SeeAlso: AH=FDh/BL=02h,AH=FDh/BL=05h
  922. --------b-1FFD--BL05-------------------------
  923. INT 1F U - C&T "SuperState" BIOS - SET AUTO WAKE UP DATE
  924.     AH = FDh
  925.     BL = 05h
  926.     CH = year century in BCD
  927.     CL = year low in BCD
  928.     DH = month in BCD
  929.     DL = date in BCD
  930. Return: CF set on error (incorrect date format or Auto Wake up is not enable)
  931. SeeAlso: AH=FDh/BL=03h"C&T",AH=FDh/BL=04h"C&T"
  932. --------O-20---------------------------------
  933. INT 20 - Minix - SEND/RECEIVE MESSAGE
  934.     AX = process ID of other process
  935.     BX -> message
  936.     CX = operation (1 send, 2 receive, 3 send&receive)
  937. Program: Minix is a Version 7 Unix-compatible operating system by Andrew
  938.       Tanenbaum
  939. Note:    the message contains the system call number (numbered as in V7
  940.       Unix(tm)) and the call parameters
  941. --------D-20---------------------------------
  942. INT 20 - DOS 1+ - TERMINATE PROGRAM
  943.     CS = PSP segment
  944. Return: never
  945. Notes:    (see INT 21/AH=00h)
  946.     this function sets the program's return code (ERRORLEVEL) to 00h
  947. SeeAlso: INT 21/AH=00h,INT 21/AH=4Ch
  948. --------G-20---------------------------------
  949. INT 20 - COMTROL HOSTESS i/ISA DEBUGGER - INVOKE FIRMWARE DEBUGGER
  950.     ???
  951. Return: ???
  952. SeeAlso: INT 21"COMTROL"
  953. --------W-20----Vx0001-----------------------
  954. INT 20 P - Microsoft Windows - VMM - VxD SERVICES
  955.     VxD = 0001h
  956. Note:    the desired VxD and service number are identified by the data
  957.       immediately following the INT 20 instruction, as in:
  958.         INT    20h
  959.         DW    service number
  960.         DW    VxD identifier
  961. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  962.  
  963. (Table 0930)
  964. Values for VMM (VxD ID 0001h) service number:
  965.  0000h    get version
  966.  0001h    get current VM handle
  967.  0002h    test current VM handle
  968.  0003h    get system VM handle
  969.  0004h    test system VM handle
  970.  0005h    validate VM handle
  971.  0006h    get VMM reenter count
  972.  0007h    begin reentrant execution
  973.  0008h    end reentrant execution
  974.  0009h    install V86 breakpoint
  975.  000Ah    remove V86 breakpoint
  976.  000Bh    allocate V86 callback
  977.  000Ch    allocation PM callback
  978.  000Dh    call when VM returns
  979.  000Eh    schedule global event
  980.  000Fh    schedule VM event
  981.  0010h    call global event
  982.  0011h    call VM event
  983.  0012h    cancel global event
  984.  0013h    cancel VM event
  985.  0014h    call priority VM event
  986.  0015h    cancel priority VM event
  987.  0016h    get NMI handler address
  988.  0017h    set NMI handler address
  989.  0018h    hook NMI event
  990.  0019h    call when VM interrupts enabled
  991.  001Ah    enable VM interrupts
  992.  001Bh    disable VM interrupts
  993.  001Ch    map flat
  994.  001Dh    map linear to VM address
  995.  001Eh    adjust execution priority
  996.  001Fh    begin critical section
  997.  0020h    end critical section
  998.  0021h    end critical section and suspend
  999.  0022h    claim critical section
  1000.  0023h    release critical section
  1001.  0024h    call when not critical
  1002.  0025h    create semaphore
  1003.  0026h    destroy semaphore
  1004.  0027h    wait on semaphore
  1005.  0028h    signal semaphore
  1006.  0029h    get critical section status
  1007.  002Ah    call when task switched
  1008.  002Bh    suspend VM
  1009.  002Ch    resume VM
  1010.  002Dh    no-fail resume VM
  1011.  002Eh    nuke VM
  1012.  002Fh    crash current VM
  1013.  0030h    get execution focus
  1014.  0031h    set execution focus
  1015.  0032h    get time slice priority
  1016.  0033h    set time slice priority
  1017.  0034h    get time slice granularity
  1018.  0035h    set time slice granularity
  1019.  0036h    get time slice information
  1020.  0037h    adjust execution time
  1021.  0038h    release time slice
  1022.  0039h    wake up VM
  1023.  003Ah    call when idle
  1024.  003Bh    get next VM handle
  1025.  003Ch    set global timeout
  1026.  003Dh    set VM timeout
  1027.  003Eh    cancel timeout
  1028.  003Fh    get system time
  1029.     Return: EAX = time in milliseconds that Windows has been running
  1030.  0040h    get VM execution time
  1031.  0041h    hook V86 interrupt chain
  1032.  0042h    get V86 interrupt vector
  1033.  0043h    set V86 interrupt vector
  1034.  0044h    get PM interrupt vector
  1035.  0045h    set PM interrupt vector
  1036.  0046h    simulate interrupt
  1037.  0047h    simulate IRET
  1038.  0048h    simulate far call
  1039.  0049h    simulate far jump
  1040.  004Ah    simulate far RET
  1041.  004Bh    simulate far RET N
  1042.  004Ch    build interrupt stack frame
  1043.  004Dh    simulate push
  1044.  004Eh    simulate pop
  1045.  004Fh    _HeapAllocate
  1046.  0050h    _HeapReAllocate
  1047.  0051h    _HeapFree
  1048.  0052h    _HeapGetSize
  1049.  0053h    _PageAllocate
  1050.  0054h    _PageReAllocate
  1051.  0055h    _PageFree
  1052.  0056h    _PageLock
  1053.  0057h    _PageUnLock
  1054.  0058h    _PageGetSizeAddr
  1055.  0059h    _PageGetAllocInfo
  1056.  005Ah    _GetFreePageCount
  1057.  005Bh    _GetSysPageCount
  1058.  005Ch    _GetVMPgCount
  1059.  005Dh    _MapIntoV86
  1060.  005Eh    _PhysIntoV86
  1061.  005Fh    _TestGlobalV86Mem
  1062.  0060h    _ModifyPageBits
  1063.  0061h    copy page table
  1064.  0062h    map linear into V86
  1065.  0063h    linear page lock
  1066.  0064h    linear page unlock
  1067.  0065h    _SetResetV86Pageabl
  1068.  0066h    _GetV86PageableArray
  1069.  0067h    _PageCheckLinRange
  1070.  0068h    page out dirty pages
  1071.  0069h    discard pages
  1072.  006Ah    _GetNulPageHandle
  1073.  006Bh    get first V86 page
  1074.  006Ch    map physical address to linear address
  1075.  006Dh    _GetAppFlatDSAlias
  1076.  006Eh    _SelectorMapFlat
  1077.  006Fh    _GetDemandPageInfo
  1078.  0070h    _GetSetPageOutCount
  1079.  0071h    hook V86 page
  1080.  0072h    assign device V86 pages
  1081.  0073h    deassign device V86 pages
  1082.  0074h    get array of V86 pages for device
  1083.  0075h    _SetNULPageAddr
  1084.  0076h    allocate GDT selector
  1085.  0077h    free GDT selector
  1086.  0078h    allocate LDT selector
  1087.  0079h    free LDT selector
  1088.  007Ah    _BuildDescriptorDWORDs
  1089.  007Bh    get descriptor
  1090.  007Ch    set descriptor
  1091.  007Dh    toggle HMA
  1092.  007Eh    get fault hook addresses
  1093.  007Fh    hook V86 fault
  1094.  0080h    hook PM fault
  1095.  0081h    hook VMM fault
  1096.  0082h    begin nested V86 execution
  1097.  0083h    begin nested execution
  1098.  0084h    execute V86-mode interrupt
  1099.  0085h    resume execution
  1100.  0086h    end nested execution
  1101.  0087h    allocate PM application callback area
  1102.  0088h    get current PM application callback area
  1103.  0089h    set V86 execution mode
  1104.  008Ah    set PM execution mode
  1105.  008Bh    begin using locked PM stack
  1106.  008Ch    end using locked PM stack
  1107.  008Dh    save client state
  1108.  008Eh    restore client state
  1109.  008Fh    execute VxD interrupt
  1110.     STACK:    WORD    interrupt number
  1111.         other registers as required by interrupt call
  1112.     Return:    registers as returned by interrupt call
  1113.  0090h    hook device service
  1114.     EAX = service ID (high word = VxD ID, low = service number)
  1115.     ESI -> new handler
  1116.  0091h    hook device V86 API
  1117.  0092h    hook device PM API
  1118.  0093h    system control (see also #2305)
  1119.  0094h    simulate I/O
  1120.  0095h    install multiple I/O handlers
  1121.  0096h    install I/O handler
  1122.  0097h    enable global trapping
  1123.  0098h    enable local trapping
  1124.  0099h    disable global trapping
  1125.  009Ah    disable local trapping
  1126.  009Bh    create list
  1127.  009Ch    destroy list
  1128.  009Dh    allocate list
  1129.  009Eh    attach list
  1130.  009Fh    attach list tail
  1131.  00A0h    insert into list
  1132.  00A1h    remove from list
  1133.  00A2h    deallocate list
  1134.  00A3h    get first item in list
  1135.  00A4h    get next item in list
  1136.  00A5h    remove first item in list
  1137.  00A6h    add instance item
  1138.  00A7h    allocate device callback area
  1139.  00A8h    allocate global V86 data area
  1140.  00A9h    allocate temporary V86 data area
  1141.  00AAh    free temporary V86 data area
  1142.  00ABh    get decimal integer from profile
  1143.  00ACh    convert decimal string to integer
  1144.  00ADh    get fixed-point number from profile
  1145.  00AEh    convert fixed-point string
  1146.  00AFh    get hex integer from profile
  1147.  00B0h    convert hex string to integer
  1148.  00B1h    get boolean value from profile
  1149.  00B2h    convert boolean string
  1150.  00B3h    get string from profile
  1151.  00B4h    get next string from profile
  1152.  00B5h    get environment string
  1153.  00B6h    get exec path
  1154.  00B7h    get configuration directory
  1155.  00B8h    open file
  1156.  00B9h    get PSP segment
  1157.  00BAh    get DOS vectors
  1158.  00BBh    get machine information
  1159.  00BCh    get/set HMA information
  1160.  00BDh    set system exit code
  1161.  00BEh    fatal error handler
  1162.  00BFh    fatal memory error
  1163.  00C0h    update system clock
  1164.  00C1h    test if debugger installed
  1165.  00C2h    output debugger string
  1166.  00C3h    output debugger character
  1167.  00C4h    input debugger character
  1168.  00C5h    debugger convert hex to binary
  1169.  00C6h    debugger convert hex to decimal
  1170.  00C7h    debugger test if valid handle
  1171.  00C8h    validate client pointer
  1172.  00C9h    test reentry
  1173.  00CAh    queue debugger string
  1174.  00CBh    log procedure call
  1175.  00CCh    debugger test current VM
  1176.  00CDh    get PM interrupt type
  1177.  00CEh    set PM interrupt type
  1178.  00CFh    get last updated system time
  1179.  00D0h    get last updated VM execution time
  1180.  00D1h    test if double-byte character-set lead byte
  1181.  00D2h    _AddFreePhysPage
  1182.  00D3h    _PageResetHandlePAddr
  1183.  00D4h    _SetLastV86Page
  1184.  00D5h    _GetLastV86Page
  1185.  00D6h    _MapFreePhysReg
  1186.  00D7h    _UnmapFreePhysReg
  1187.  00D8h    _XchgFreePhysReg
  1188.  00D9h    _SetFreePhysRegCalBk
  1189.  00DAh    get next arena (MCB)
  1190.  00DBh    get name of ugly TSR
  1191.  00DCh    get debug options
  1192.  00DDh    set physical HMA alias
  1193.  00DEh    _GetGlblRng0V86IntBase
  1194.  00DFh    add global V86 data area
  1195.  00E0h    get/set detailed VM error
  1196.  00E1h    Is_Debug_Chr
  1197.  00E2h    clear monochrome screen
  1198.  00E3h    output character to mono screen
  1199.  00E4h    output string to mono screen
  1200.  00E5h    set current position on mono screen
  1201.  00E6h    get current position on mono screen
  1202.  00E7h    get character from mono screen
  1203.  00E8h    locate byte in ROM
  1204.  00E9h    hook invalid page fault
  1205.  00EAh    unhook invalid page fault
  1206.  00EBh    set delete on exit file
  1207.  00ECh    close VM
  1208.  00EDh    "Enable_Touch_1st_Meg"
  1209.  00EEh    "Disable_Touch_1st_Meg"
  1210.  00EFh    install exception handler
  1211.  00F0h    remove exception handler
  1212.  00F1h    "Get_Crit_Status_No_Block"
  1213.  00F2h    "_Schedule_VM_RTI_Event"
  1214.  00F3h    "_Trace_Out_Service"
  1215.  00F4h    "_Debug_Out_Service"
  1216.  00F5h    "-Debug_Flags_Service"
  1217.  00F6h    VMM add import module name
  1218.  00F7h    VMM Add DDB
  1219.  00F8h    VMM Remove DDB
  1220.  00F9h    get thread time slice priority
  1221.  00FAh    set thread time slice priority
  1222.  00FBh    schedule thread event
  1223.  00FCh    cancel thread event
  1224.  00FDh    set thread timeout
  1225.  00FEh    set asynchronous timeout
  1226.  00FFh    "_AllocatreThreadDataSlot"
  1227.  0100h    "_FreeThreadDataSlot"
  1228.  0101h    create Mutex
  1229.  0102h    destroy Mutex
  1230.  0103h    get Mutex owner
  1231.  0104h    call when thread switched
  1232.  0105h    create thread
  1233.  0106h    start thread
  1234.  0107h    terminate thread
  1235.  0108h    get current thread handle
  1236.  0109h    test current thread handle
  1237.  010Ah    "Get_Sys_Thread_Handle"
  1238.  010Bh    "Test_Sys_Thread_Handle"
  1239.  010Ch    "Validate_Thread_Handle"
  1240.  010Dh    ???
  1241.  0116h    "Remove_IO_Handler"
  1242.  0117h    "Remove_Mult_IO_Handlers"
  1243.  0118h    unhook V86 interrupt chain
  1244.  0119h    unhook V86 fault handler
  1245.  011Ah    unhook PM fault handler
  1246.  011Bh    unhook VMM fault handler
  1247.  011Ch    unhook device serive
  1248.  011Dh    ???
  1249.  0129h    "_Register_Win32_Services"
  1250.  012Ah    "Cancel_Call_When_Not_Critical"
  1251.  012Bh    "Cancel_Call_When_Idle"
  1252.  012Ch    "Cancel_Call_When_Task_Switched"
  1253.  012Dh    "_Debug_Printf_Service"
  1254.  012Eh    enter Mutex
  1255.  012Fh    leave Mutex
  1256.  0130h    simulate VM I/O
  1257.  0131h    "Signal_Semaphore_No_Switch"
  1258.  0132h    "_MMSwitchContext"
  1259.  0133h    "_MMModifyPermissions"
  1260.  0134h    "_MMQuery"
  1261.  0135h    "_EnterMustComplete"
  1262.  0136h    "_LeaveMustComplete"
  1263.  0137h    "_ResumeExecMustComplete"
  1264.  0138h    get thread termination status
  1265.  0139h    "_GetInstanceInfo"
  1266.  013Ah    "_ExecIntMustComplete"
  1267.  013Bh    "_ExecVxDIntMustComplete"
  1268.  013Ch    begin V86 serialization
  1269.  013Dh    unhook V86 page
  1270.  013Eh    "VMM_GetVxDLocationList"
  1271.  013Fh    "VMM_GetDDBList" get start of VxD chain
  1272.     (see also #2305 at INT 2F/AX=1684h/BX=0017h)
  1273.  0140h    unhook NMI event
  1274.  0141h    "Get_Instanced_V86_Int_Vector"
  1275.  0142h    get or set real DOS PSP
  1276.  0143h    call priority thread event
  1277.  0144h    "Get_System_Time_Address"
  1278.  0145h    "Get_Crit_Status_Thread"
  1279.  0146h    "Get_DDB"
  1280.  0147h    "Directed_Sys_Control"
  1281.  0148h    "_RegOpenKey"
  1282.  0149h    "_RegCloseKey"
  1283.  014Ah    "_RegCreateKey"
  1284.  014Bh    "_RegDeleteKey"
  1285.  014Ch    "_RegEnumKey"
  1286.  014Dh    "_RegQueryValue"
  1287.  014Eh    "_RegSetValue"
  1288.  014Fh    "_RegDeleteValue"
  1289.  0150h    "_RegEnumValue"
  1290.  0151h    "_RegQueryValueEx"
  1291.  0152h    "_RegSetValueEx"
  1292.  0153h    "_CallRing3"
  1293.  0154h    "Exec_PM_Int"
  1294.  0155h    "_RegFlushKey"
  1295.  0156h    ???
  1296.  016Dh    ???
  1297.  016Eh    "_GetRegistryPath"
  1298.  016Fh    "_GetRegistryKey"
  1299.  0170h    "_CleanupNestedExec"
  1300.  0171h    "_RegRemapPreDefKey"
  1301.  0172h    "End_V86_Serialization"
  1302.  0173h    "_Assert_Range"
  1303.  0174h    "_Sprintf"
  1304.  0175h    "_PageChangePager"
  1305.  0176h    "_RegCreateDynKey"
  1306.  0177h    "RegQMulti"
  1307.  0178h    "Boost_Thread_With_VM"
  1308.  0179h    "Get_Boot_Flags"
  1309.  017Ah    ???
  1310.  017Bh    "_lstrcpyn"
  1311.  017Ch    ???
  1312.  017Dh    "_lmemcpy"
  1313.  017Eh    ???
  1314.  017Fh    ???
  1315.  0180h    ???
  1316.  0181h    ???
  1317.  0182h    "_SetReclaimableItem"
  1318.  0183h    "_EnumReclaimableItem"
  1319.  0191h    ...last service for Windows95 SP1
  1320.  811Ch    ??? (called by KEYREMAP.VXD)
  1321.     EAX = service ID (high word = VxD ID, low = service number)
  1322.     ESI -> handler
  1323. SeeAlso: #0931,INT 2F/AX=1684h/BX=0001h
  1324. --------W-20----Vx0003-----------------------
  1325. INT 20 P - Microsoft Windows - VxD SERVICES
  1326.     VxD = 0003h
  1327. Note:    the desired VxD and service number are identified by the data
  1328.       immediately following the INT 20 instruction, as in:
  1329.         INT    20h
  1330.         DW    service number
  1331.         DW    VxD identifier
  1332. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  1333.  
  1334. (Table 0931)
  1335. Values for VPICD (VxD ID 0003h) service number:
  1336.  00h    get version
  1337.  01h    virtualize IRQ
  1338.  02h    set interrupt request
  1339.  03h    clear interrupt request
  1340.  04h    physical EOI
  1341.  05h    get complete status
  1342.  06h    get status
  1343.  07h    test physical request
  1344.  08h    physically mask
  1345.  09h    physically unmask
  1346.  0Ah    set automatic masking
  1347.  0Bh    get IRQ complete status
  1348.  0Ch    convert handle to IRQ
  1349.  0Dh    convert IRQ to interrupt
  1350.  0Eh    convert interrupt to IRQ
  1351.  0Fh    call on hardware interrupt
  1352.  10h    force default owner
  1353.  11h    force default behavior
  1354.  18h    ...last service for Windows95 SP1
  1355. SeeAlso: #0930,#0932,INT 2F/AX=1684h/BX=0003h
  1356. --------W-20----Vx0004-----------------------
  1357. INT 20 P - Microsoft Windows - VDMAD - VxD SERVICES
  1358.     VxD = 0004h
  1359. Note:    the desired VxD and service number are identified by the data
  1360.       immediately following the INT 20 instruction, as in:
  1361.         INT    20h
  1362.         DW    service number
  1363.         DW    VxD identifier
  1364. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  1365.  
  1366. (Table 0932)
  1367. Values for VDMAD (VxD ID 0004h) service number:
  1368.  00h    get version
  1369.  01h    virtualize channel
  1370.  02h    get region information
  1371.  03h    set region information
  1372.  04h    get virtual state
  1373.  05h    set virtual state
  1374.  06h    set physical state
  1375.  07h    mask channel
  1376.  08h    unmask channel
  1377.  09h    lock DMA region
  1378.  0Ah    unlock DMA region
  1379.  0Bh    scatter lock
  1380.  0Ch    scatter unlock
  1381.  0Dh    reserve buffer space
  1382.  0Eh    request buffer
  1383.  0Fh    release buffer
  1384.  10h    copy to buffer
  1385.  11h    copy from buffer
  1386.  12h    default handler
  1387.  13h    disable translation
  1388.  14h    enable translation
  1389.  15h    get EISA address mode
  1390.  16h    set EISA address mode
  1391.  17h    unlock DMA region (ND)
  1392.  ...
  1393.  21h    ...last service for Windows95 SP1
  1394. SeeAlso: #0931,#2294,#2331 at INT 2F/AX=1684h/BX=0444h
  1395. --------W-20----Vx0005-----------------------
  1396. INT 20 P - Microsoft Windows - VTD - VxD SERVICES
  1397.     VxD = 0005h
  1398. Note:    the desired VxD and service number are identified by the data
  1399.       immediately following the INT 20 instruction, as in:
  1400.         INT    20h
  1401.         DW    service number
  1402.         DW    VxD identifier
  1403. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  1404.  
  1405. (Table 0933)
  1406. Values for VTD (VxD ID 0005h) service number:
  1407.  0000h    get version
  1408.  0001h    update system clock
  1409.  0002h    get interrupt period
  1410.  0003h    begin minimum interrupt period
  1411.  0004h    end minimum interrupt period
  1412.  0005h    disable trapping
  1413.  0006h    enable trapping
  1414.  0007h    get real time
  1415.     Return: EDX:EAX = time in 840ns units since Windows was started
  1416.  0008h    "VTD_Get_Date_And_Time"
  1417.  0009h    ???
  1418.  000Ah    ...last service for Windows95 SP1
  1419. SeeAlso: #2294 at INT 2F/AX=1684h/BX=0005h
  1420. --------W-20----Vx0006-----------------------
  1421. INT 20 P - Microsoft Windows - V86MMGR - VxD SERVICES
  1422.     VxD = 0006h
  1423. Note:    the desired VxD and service number are identified by the data
  1424.       immediately following the INT 20 instruction, as in:
  1425.         INT    20h
  1426.         DW    service number
  1427.         DW    VxD identifier
  1428. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  1429.  
  1430. (Table 0934)
  1431. Values for V86MMGR (VxD ID 0006h) service number:
  1432.  00h    get version
  1433.  01h    allocate V86 pages
  1434.  02h    set EMS and XMS limits
  1435.  03h    get EMS and XMS limits
  1436.  04h    set mapping information
  1437.  05h    get mapping information
  1438.  06h    Xlat API
  1439.  07h    load client pointer
  1440.  08h    allocate buffer
  1441.  09h    free buffer
  1442.  0Ah    get Xlat buffer state
  1443.  0Bh    set Xlat buffer state
  1444.  0Ch    get VM flat selector
  1445.  0Dh    map pages
  1446.  0Eh    free page map region
  1447.  0Fh    _LocalGlobalReg
  1448.  10h    get page status
  1449.  11h    set local A20
  1450.  12h    reset base pages
  1451.  13h    set available mapped pages
  1452.  14h    "V86MMGR_NoUMBInitCalls"
  1453.  15h    "V86MMGR_Get_EMS_XMS_Avail"
  1454.  16h    "V86MMGR_Toggle_HMA"
  1455.     EAX = ???
  1456.  17h    "V86MMGR_Dev_Init"
  1457.  18h    "V86MMGR_Alloc_UM_Page"
  1458. SeeAlso: #2294,#0935,INT 2F/AX=1684h"DEVICE API"
  1459. --------W-20----Vx0007-----------------------
  1460. INT 20 P - Microsoft Windows - PageSwap - VxD SERVICES
  1461.     VxD = 0007h
  1462. Note:    the desired VxD and service number are identified by the data
  1463.       immediately following the INT 20 instruction, as in:
  1464.         INT    20h
  1465.         DW    service number
  1466.         DW    VxD identifier
  1467. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  1468.  
  1469. (Table 0935)
  1470. Values for PageSwap (VxD ID 0007h) service number:
  1471.  00h    get version
  1472.  01h    test create
  1473.  02h    create swap file
  1474.  03h    destroy swap file
  1475.  04h    in
  1476.  05h    out
  1477.  06h    test if I/O valid
  1478.  07h    "Read_Or_Write"
  1479.  08h    "Grow_File"
  1480.  09h    "Init_File"
  1481. SeeAlso: #0934,#0936,#0937,#2296
  1482. --------W-20----Vx0009-----------------------
  1483. INT 20 P - Microsoft Windows - REBOOT - VxD SERVICES
  1484.     VxD = 0009h
  1485. Note:    the desired VxD and service number are identified by the data
  1486.       immediately following the INT 20 instruction, as in:
  1487.         INT    20h
  1488.         DW    service number
  1489.         DW    VxD identifier
  1490. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  1491.  
  1492. (Table 0936)
  1493. Values for REBOOT (VxD ID 0009h) service number:
  1494.  00h    get REBOOT version???
  1495.  01h    ???
  1496.  02h    ???
  1497.  03h    ...last service for Windows95 SP1
  1498. SeeAlso: #0935,#0937,#2290
  1499. --------W-20----Vx000A-----------------------
  1500. INT 20 P - Microsoft Windows - VDD - VxD SERVICES
  1501.     VxD = 000Ah
  1502. Note:    the desired VxD and service number are identified by the data
  1503.       immediately following the INT 20 instruction, as in:
  1504.         INT    20h
  1505.         DW    service number
  1506.         DW    VxD identifier
  1507. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  1508.  
  1509. (Table 0937)
  1510. Values for VDD (VxD ID 000Ah) service number:
  1511.  00h    get version
  1512.  01h    PIF state
  1513.  02h    get GrabRtn
  1514.  03h    hide cursor
  1515.  04h    set VM type
  1516.  05h    get ModTime
  1517.  06h    set HCurTrk
  1518.  07h    message clear screen
  1519.  08h    message foreground color
  1520.  09h    message background color
  1521.  0Ah    message output text
  1522.  0Bh    message set cursor position
  1523.  0Ch    query access
  1524.  0Dh    "VDD_Check_Update_Soon"
  1525.  0Eh    "VDD_Get_Mini_Dispatch_Table"
  1526.  0Fh    "VDD_Register_Virtual_Port"
  1527.  10h    "VDD_Get_VM_Info"
  1528.  11h    "VDD_Get_Special_VM_IDs"
  1529.  12h    "VDD_Register_Extra_Screen_Selector"
  1530.  13h    "VDD_Takeover_VGA_Port"
  1531.  14h    ???
  1532.  15h    ???
  1533.  16h    ...last service for Windows95 SP1
  1534. SeeAlso: #0936,#0938,#2296
  1535. --------W-20----Vx000B-----------------------
  1536. INT 20 P - Microsoft Windows - VSD - VxD SERVICES
  1537.     VxD = 000Bh
  1538. Note:    the desired VxD and service number are identified by the data
  1539.       immediately following the INT 20 instruction, as in:
  1540.         INT    20h
  1541.         DW    service number
  1542.         DW    VxD identifier
  1543. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  1544.  
  1545. (Table 0938)
  1546. Values for VSD (VxD ID 000Bh) service number:
  1547.  00h    get version
  1548.  01h    bell
  1549.  02h    sound on
  1550.  03h    "VSD_TakeSoundPort"
  1551. SeeAlso: #0937,#0939
  1552. --------W-20----Vx000C-----------------------
  1553. INT 20 P - Microsoft Windows - VMD / VMOUSE - VxD SERVICES
  1554.     VxD = 000Ch
  1555. Note:    the desired VxD and service number are identified by the data
  1556.       immediately following the INT 20 instruction, as in:
  1557.         INT    20h
  1558.         DW    service number
  1559.         DW    VxD identifier
  1560. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  1561.  
  1562. (Table 0939)
  1563. Values for VMD / VMOUSE (VxD ID 000Ch) service number:
  1564.  00h    get version
  1565.  01h    set mouse type
  1566.  02h    get mouse owner
  1567.  03h    "VMOUSE_Post_Pointer_Message"
  1568.  04h    "VMOUSE_Set_Cursor_Proc"
  1569.  05h    "VMOUSE_Call_Cursor_Proc"
  1570.  06h    "VMOUSE_Set_Mouse_Data~Get_Mouse_Data"
  1571.  07h    "VMOUSE_Manipulate_Pointer_Message"
  1572.  08h    "VMOUSE_Set_Middle_Button"
  1573.  09h    ???
  1574.  0Ah    ???
  1575.  0Bh    ...last service for Windows95 SP1
  1576. SeeAlso: #0938,#0940,INT 2F/AX=1684h/BX=000Ch
  1577. --------W-20----Vx000D-----------------------
  1578. INT 20 P - Microsoft Windows - VKD - VxD SERVICES
  1579.     VxD = 000Dh
  1580. Note:    the desired VxD and service number are identified by the data
  1581.       immediately following the INT 20 instruction, as in:
  1582.         INT    20h
  1583.         DW    service number
  1584.         DW    VxD identifier
  1585. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  1586.  
  1587. (Table 0940)
  1588. Values for VKD (VxD ID 000Dh) service number:
  1589.  00h    get version
  1590.  01h    define hotkey
  1591.  02h    remove hotkey
  1592.  03h    locally enable hotkey
  1593.  04h    locally disable hotkey
  1594.  05h    reflect hotkey
  1595.  06h    cancel hotkey state
  1596.  07h    force keys
  1597.  08h    get keyboard owner
  1598.  09h    define paste mode
  1599.  0Ah    start pasting
  1600.  0Bh    cancel paste
  1601.  0Ch    get message key
  1602.  0Dh    peek message key
  1603.  0Eh    flush message key queue
  1604.  14h    ...last service for Windows95 SP1
  1605. SeeAlso: #0939,#0941
  1606. --------W-20----Vx000E-----------------------
  1607. INT 20 P - Microsoft Windows - VCD - VxD SERVICES
  1608.     VxD = 000Eh
  1609. Note:    the desired VxD and service number are identified by the data
  1610.       immediately following the INT 20 instruction, as in:
  1611.         INT    20h
  1612.         DW    service number
  1613.         DW    VxD identifier
  1614. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  1615.  
  1616. (Table 0941)
  1617. Values for VCD (VxD ID 000Eh) service number:
  1618.  00h    get version
  1619.  01h    set port global
  1620.  02h    get focus
  1621.  03h    virtualize port
  1622.  ...
  1623.  0Ch    ...last service for Windows95 SP1
  1624. SeeAlso: #0940,#0942
  1625. --------W-20----Vx0010-----------------------
  1626. INT 20 P - Microsoft Windows - BlockDev / IOS - VxD SERVICES
  1627.     VxD = 0010h
  1628. Note:    the desired VxD and service number are identified by the data
  1629.       immediately following the INT 20 instruction, as in:
  1630.         INT    20h
  1631.         DW    service number
  1632.         DW    VxD identifier
  1633. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  1634.  
  1635. (Table 0942)
  1636. Values for BlockDev/IOS (VxD ID 0010h) service number:
  1637.  00h    get version
  1638.  01h    register device
  1639.  02h    find INT 13 drive
  1640.  03h    get device list
  1641.  04h    send command
  1642.  05h    command complete
  1643.  06h    synchronous command
  1644.  07h    "IOS_Register"
  1645.  08h    "IOS_Requestor_Service"
  1646.  09h    "IOS_Exclusive_Access"
  1647.  0Ah    "IOS_Send_Next_Command"
  1648.  0Bh    "IOS_Set_Async_Time_Out"
  1649.  0Ch    "IOS_Signal_Semaphore_No_Switch"
  1650.  0Dh    "IOSIdleStatus"
  1651.  0Eh    "IOSMapIORSToI24"
  1652.  0Fh    "IOSMapIORSToI21"
  1653.  10h    ...last service for Windows95 SP1
  1654. SeeAlso: #0941,#0943
  1655. --------W-20----Vx0011-----------------------
  1656. INT 20 P - Microsoft Windows - VMCPD - VxD SERVICES
  1657.     VxD = 0011h
  1658. Note:    the desired VxD and service number are identified by the data
  1659.       immediately following the INT 20 instruction, as in:
  1660.         INT    20h
  1661.         DW    service number
  1662.         DW    VxD identifier
  1663. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  1664.  
  1665. (Table 0943)
  1666. Values for VMCPD (VxD ID 0011h) service number:
  1667.  00h    "VMCPD_Get_Version"
  1668.  01h    "VMCPD_Get_Virt_State"
  1669.  02h    "VMCPD_Set_Virt_State"
  1670.  ...
  1671.  08h    ...last service for Windows95 SP1
  1672. SeeAlso: #0942,#0944,#2290
  1673. --------W-20----Vx0012-----------------------
  1674. INT 20 P - Microsoft Windows - EBIOS - VxD SERVICES
  1675.     VxD = 0012h
  1676. Note:    the desired VxD and service number are identified by the data
  1677.       immediately following the INT 20 instruction, as in:
  1678.         INT    20h
  1679.         DW    service number
  1680.         DW    VxD identifier
  1681. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  1682.  
  1683. (Table 0944)
  1684. Values for EBIOS (VxD ID 0012h) service number:
  1685.  00h    get EBIOS version
  1686.  01h    get unused memory
  1687. SeeAlso: #0943,#0945
  1688. --------W-20----Vx0014-----------------------
  1689. INT 20 P - Microsoft Windows - VNETBIOS - VxD SERVICES
  1690.     VxD = 0014h
  1691. Note:    the desired VxD and service number are identified by the data
  1692.       immediately following the INT 20 instruction, as in:
  1693.         INT    20h
  1694.         DW    service number
  1695.         DW    VxD identifier
  1696. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  1697.  
  1698. (Table 0945)
  1699. Values for VNETBIOS (VxD ID 0014h) service number:
  1700.  00h    get version
  1701.  01h    register
  1702.  02h    submit
  1703.  03h    enum
  1704.  04h    deregister
  1705.  05h    register2
  1706.  06h    map
  1707.  07h    enum2
  1708. SeeAlso: #0944,#0946
  1709. --------W-20----Vx0015-----------------------
  1710. INT 20 P - Microsoft Windows - DOSMGR - VxD SERVICES
  1711.     VxD = 0015h
  1712. Note:    the desired VxD and service number are identified by the data
  1713.       immediately following the INT 20 instruction, as in:
  1714.         INT    20h
  1715.         DW    service number
  1716.         DW    VxD identifier
  1717. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  1718.  
  1719. (Table 0946)
  1720. Values for DOSMGR (VxD ID 0015h) service number:
  1721.  00h    get version
  1722.  01h    set exec VM data
  1723.  02h    coyp VM drive state
  1724.  03h    execute VM
  1725.  04h    get InDOS pointer
  1726.  05h    add device
  1727.  06h    remove device
  1728.  07h    instance device
  1729.  08h    get DOS critical status
  1730.  09h    enable InDOS polling
  1731.  0Ah    backfill allowed
  1732.  0Bh    "LocalGlobalReg"
  1733.  0Ch    "Init_UMB_Area"
  1734.  0Dh    "Begin_V86_App"
  1735.  0Eh    "End_V86_App"
  1736.  0Fh    "Alloc_Local_Sys_VM_Mem"
  1737.     EAX = number of paragraphs??? to allocate
  1738.  10h    ???
  1739.  11h    ???
  1740.  12h    ...last service for Windows95 SP1
  1741. SeeAlso: #0945,#2304 at INT 2F/AX=1684h/BX=0015h
  1742. --------W-20----Vx0017-----------------------
  1743. INT 20 P - Microsoft Windows - SHELL - VxD SERVICES
  1744.     VxD = 0017h
  1745. Note:    the desired VxD and service number are identified by the data
  1746.       immediately following the INT 20 instruction, as in:
  1747.         INT    20h
  1748.         DW    service number
  1749.         DW    VxD identifier
  1750. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  1751.  
  1752. (Table 0947)
  1753. Values for SHELL (VxD ID 0017h) service number:
  1754.  00h    get version
  1755.  01h    resolve contention
  1756.  02h    event
  1757.  03h    SYSMODAL message
  1758.  04h    message
  1759.  05h    get VM information
  1760.  06h    "_SHELL_PostMessage"
  1761.  07h    "_SHELL_WinExec"
  1762.  08h    "_SHELL_CallDll"
  1763.  09h    "SHELL_OpenClipboard"
  1764.  0Ah    "SHELL_SetClipboardData"
  1765.  0Bh    "SHELL_GetClipboardData"
  1766.  0Ch    "SHELL_CloseClipboard"
  1767.  0Dh    "_SHELL_Install_Taskman_Hooks"
  1768.  0Eh    "SHELL_Hook_Properties"
  1769.  0Fh    "SHELL_Unhook_Properties"
  1770.  10h    "SHELL_OEMKeyScan"
  1771.  11h    "SHELL_Update_User_Activity"
  1772.  ...
  1773.  1Bh    ...last service for Windows95 SP1
  1774. SeeAlso: #0946,#0948,#2305 at INT 2F/AX=1684h/BX=0017h
  1775. --------W-20----Vx0018-----------------------
  1776. INT 20 P - Microsoft Windows - VMPoll - VxD SERVICES
  1777.     VxD = 0018h
  1778. Note:    the desired VxD and service number are identified by the data
  1779.       immediately following the INT 20 instruction, as in:
  1780.         INT    20h
  1781.         DW    service number
  1782.         DW    VxD identifier
  1783. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  1784.  
  1785. (Table 0948)
  1786. Values for VMPoll (VxD ID 0018h) service number:
  1787.  00h    get version
  1788.  01h    enable/disable
  1789.  02h    reset detection
  1790.  03h    check idle
  1791. SeeAlso: #0933,#2305 at INT 2F/AX=1684h/BX=0017h
  1792. --------W-20----Vx001A-----------------------
  1793. INT 20 P - Microsoft Windows - DOSNET - VxD SERVICES
  1794.     VxD = 001Ah
  1795. Note:    the desired VxD and service number are identified by the data
  1796.       immediately following the INT 20 instruction, as in:
  1797.         INT    20h
  1798.         DW    service number
  1799.         DW    VxD identifier
  1800. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  1801.  
  1802. (Table 0949)
  1803. Values for DOSNET (VxD ID 001Ah) service number:
  1804.  00h    get version
  1805.  01h    send FILESYSCHANGE
  1806.  02h    do PSP adjust
  1807. SeeAlso: #0948,#0950
  1808. --------W-20----Vx001C-----------------------
  1809. INT 20 P - Microsoft Windows - LoadHi - VxD SERVICES
  1810.     VxD = 001Ch
  1811. Note:    the desired VxD and service number are identified by the data
  1812.       immediately following the INT 20 instruction, as in:
  1813.         INT    20h
  1814.         DW    service number
  1815.         DW    VxD identifier
  1816. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  1817.  
  1818. (Table 0950)
  1819. Values for LoadHi (VxD ID 001Ch) service number:
  1820.  00h    get version
  1821.     Return:    CF clear
  1822.         EAX = version (AH = major, AL = minor)
  1823.         ESI -> ASCIZ signature "LoadHi"
  1824. SeeAlso: #0949,#0951
  1825. --------W-20----Vx0020-----------------------
  1826. INT 20 P - Microsoft Windows - Int13 - VxD SERVICES
  1827.     VxD = 0020h
  1828. Note:    the desired VxD and service number are identified by the data
  1829.       immediately following the INT 20 instruction, as in:
  1830.         INT    20h
  1831.         DW    service number
  1832.         DW    VxD identifier
  1833. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  1834.  
  1835. (Table 0951)
  1836. Values for Int13 (VxD ID 0020h) service number:
  1837.  00h    get version
  1838.  01h    device registered
  1839.  02h    translate VM interrupt
  1840.  03h    hooking BIOS interrupt
  1841.  04h    unhooking BIOS interrupt
  1842. SeeAlso: #0950,#0952
  1843. --------W-20----Vx0021-----------------------
  1844. INT 20 P - Microsoft Windows - PAGEFILE - VxD SERVICES
  1845.     VxD = 0021h
  1846. Note:    the desired VxD and service number are identified by the data
  1847.       immediately following the INT 20 instruction, as in:
  1848.         INT    20h
  1849.         DW    service number
  1850.         DW    VxD identifier
  1851. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  1852.  
  1853. (Table 0952)
  1854. Values for PAGEFILE (VxD ID 0021h) service number:
  1855.  00h    get version
  1856.  01h    init file
  1857.  02h    clean up
  1858.  03h    grow file
  1859.  04h    read or write
  1860.  05h    cancel
  1861.  06h    test I/O valid
  1862.  07h    "Get_Size_Info"
  1863.  08h    "Set_Async_Manager"
  1864.  09h    "Call_Async_Manager"
  1865. SeeAlso: #0951,#2309 at INT 2F/AX=1684h/BX=0021h
  1866. --------W-20----Vx0026-----------------------
  1867. INT 20 P - Microsoft Windows - VPOWERD - VxD SERVICES
  1868.     VxD = 0026h
  1869. Note:    the desired VxD and service number are identified by the data
  1870.       immediately following the INT 20 instruction, as in:
  1871.         INT    20h
  1872.         DW    service number
  1873.         DW    VxD identifier
  1874. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  1875.  
  1876. (Table 0953)
  1877. Values for VPOWERD (VxD ID 0026h) service number:
  1878.  00h    get version
  1879.     Return:    CF clear
  1880.         EAX = version (AH = major, AL = minor)
  1881.  01h    get APM BIOS version
  1882.     Return: CF clear
  1883.         EAX = APM BIOS version
  1884.  02h    get current power management level
  1885.     Return: CF clear
  1886.         EAX = power management level
  1887.  03h    enable/disable power management (see INT 15/AX=5308h)
  1888.     Return: EAX = error code (see #2313) or 00000000h if successful
  1889.  04h    set power state (see INT 15/AX=5307h)
  1890.     ???
  1891.     Return: EAX = error code (see #2313) or 00000000h if successful
  1892.  05h    set system power status
  1893.     Return: EAX = error code (see #2313) or 00000000h if successful
  1894.  06h    restore APM power-on defaults (see INT 15/AX=5309h)
  1895.     Return: EAX = error code (see #2313) or 00000000h if successful
  1896.  07h    get power status (see INT 15/AX=530Ah)
  1897.     Return: ???
  1898.  08h    get APM 1.1 power state (see INT 15/AX=530Ch)
  1899.     Return: ???
  1900.  09h    invoke OEM APM function
  1901.     ??? -> bufer containing parameters for INT 15/AX=5380h
  1902.     Return: EAX = error code (see #2313) or 00000000h if successful
  1903.         buffer updated if successful
  1904.  0Ah    register power handler
  1905.     ???
  1906.     Return: EAX = error code (see #2313) or 00000000h if successful
  1907.  0Bh    deregister power handler
  1908.     ???
  1909.     Return: EAX = error code (see #2313) or 00000000h if successful
  1910.  0Ch    Win32 get system power status
  1911.  0Dh    Win32 set system power status
  1912. SeeAlso: #0952,#0954,INT 2F/AX=1684h/BX=0026h
  1913. --------W-20----Vx0027-----------------------
  1914. INT 20 P - Microsoft Windows - VXDLDR - VxD SERVICES
  1915.     VxD = 0027h
  1916. Note:    the desired VxD and service number are identified by the data
  1917.       immediately following the INT 20 instruction, as in:
  1918.         INT    20h
  1919.         DW    service number
  1920.         DW    VxD identifier
  1921. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  1922.  
  1923. (Table 0954)
  1924. Values for VXDLDR (VxD ID 0027h) service number:
  1925.  00h    "VXDLDR_Get_Version"
  1926.  01h    "VXDLDR_LoadDevice"
  1927.  02h    "VXDLDR_UnloadDevice"
  1928.  03h    "VXDLDR_DevInitSucceeded"
  1929.  04h    "VXDLDR_DevInitFailed"
  1930.  05h    "VXDLDR_GetDeviceList"
  1931.  06h    "VXDLDR_UnloadMe"
  1932.  07h    "PELDR_LoadModule"
  1933.  08h    "PELDR_GetModuleHandle"
  1934.  09h    "PELDR_GetModuleUsage"
  1935.  0Ah    "PELDR_GetEntryPoint"
  1936.  0Bh    "PELDR_GetProcAddress"
  1937.  0Ch    "PELDR_AddExportTable"
  1938.  0Dh    "PELDR_RemoveExportTable"
  1939.  0Eh    "PELDR_FreeModule"
  1940.  0Fh    ???
  1941.  10h    ???
  1942.  11h    ...last service for Windows95 SP1
  1943. SeeAlso: #0952,#0955
  1944. --------W-20----Vx0028-----------------------
  1945. INT 20 P - Microsoft Windows - NDIS - VxD SERVICES
  1946.     VxD = 0028h
  1947. Note:    the desired VxD and service number are identified by the data
  1948.       immediately following the INT 20 instruction, as in:
  1949.         INT    20h
  1950.         DW    service number
  1951.         DW    VxD identifier
  1952. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  1953.  
  1954. (Table 0955)
  1955. Values for NDIS (VxD ID 0028h) service number:
  1956.  00h    "NdisGetVersion"
  1957.  01h    "NdisAllocateSpinLock"
  1958.  02h    "NdisFreeSpinLock"
  1959.  03h    "NdisAcquireSpinLock"
  1960.  04h    "NdisReleaseSpinLock"
  1961.  05h    "NdisOpenConfiguration"
  1962.  06h    "NdisReadConfiguration"
  1963.  07h    "NdisCloseConfiguration"
  1964.  08h    "NdisReadEisaSlotInformation"
  1965.  09h    "NdisReadMcaPosInformation"
  1966.  0Ah    "NdisAllocateMemory"
  1967.  0Bh    "NdisFreeMemory"
  1968.  0Ch    "NdisSetTimer"
  1969.  0Dh    "NdisCancelTimer"
  1970.  0Eh    "NdisStallExecution"
  1971.  0Fh    "NdisInitializeInterrupt"
  1972.  10h    "NdisRemoveInterrupt"
  1973.  11h    "NdisSynchronizeWithInterrupt"
  1974.  12h    "NdisOpenFile"
  1975.  13h    "NdisMapFile"
  1976.  14h    "NdisUnmapFile"
  1977.  15h    "NdisCloseFile"
  1978.  16h    "NdisAllocatePacketPool"
  1979.  17h    "NdisFreePacketPool"
  1980.  18h    "NdisAllocatePacket"
  1981.  19h    "NdisReinitializePacket"
  1982.  1Ah    "NdisFreePacket"
  1983.  1Bh    "NdisQueryPacket"
  1984.  1Ch    "NdisAllocateBufferPool"
  1985.  1Dh    "NdisFreeBufferPool"
  1986.  1Eh    "NdisAllocateBuffer"
  1987.  1Fh    "NdisCopyBuffer"
  1988.  20h    "NdisFreeBuffer"
  1989.  21h    "NdisQueryBuffer"
  1990.  22h    "NdisGetBufferPhysicalAddress"
  1991.  23h    "NdisChainBufferAtFront"
  1992.  24h    "NdisChainBufferAtBack"
  1993.  25h    "NdisUnchainBufferAtFront"
  1994.  26h    "NdisUnchainBufferAtBack"
  1995.  27h    "NdisGetNextBuffer"
  1996.  28h    "NdisCopyFromPacketToPacket"
  1997.  29h    "NdisRegisterProtocol"
  1998.  2Ah    "NdisDeregisterProtocol"
  1999.  2Bh    "NdisOpenAdapter"
  2000.  2Ch    "NdisCloseAdapter"
  2001.  2Dh    "NdisSend"
  2002.  2Eh    "NdisTransferData"
  2003.  2Fh    "NdisReset"
  2004.  30h    "NdisRequest"
  2005.  31h    "NdisInitializeWrapper"
  2006.  32h    "NdisTerminateWrapper"
  2007.  33h    "NdisRegisterMac"
  2008.  34h    "NdisDeregisterMac"
  2009.  35h    "NdisRegisterAdapter"
  2010.  36h    "NdisDeregisterAdapter"
  2011.  37h    "NdisCompleteOpenAdapter"
  2012.  38h    "NdisCompleteCloseAdapter"
  2013.  39h    "NdisCompleteSend"
  2014.  3Ah    "NdisCompleteTransferData"
  2015.  3Bh    "NdisCompleteReset"
  2016.  3Ch    "NdisCompleteRequest"
  2017.  3Dh    "NdisIndicateReceive"
  2018.  3Eh    "NdisIndicateReceiveComplete"
  2019.  3Fh    "NdisIndicateStatus"
  2020.  40h    "NdisIndicateStatusComplete"
  2021.  41h    "NdisCompleteQueryStatistics"
  2022.  42h    "NdisEqualString"
  2023.  43h    "NdisNetAddressStringToBinary"
  2024.  44h    "NdisReadNetworkAddress"
  2025.  45h    "NdisWriteErrorLogEntry"
  2026.  46h    "C_MapPhysToLinear"
  2027.  47h    "C_HeapFree"
  2028.  48h    "NdisAllocateSharedMemory"
  2029.  49h    "NdisFreeSharedMemory"
  2030.  ...
  2031.  5Fh    ...last service for Windows95 SP1
  2032. SeeAlso: #0954,#0956
  2033. --------W-20----Vx002A-----------------------
  2034. INT 20 P - Microsoft Windows - VWIN32 - VxD SERVICES
  2035.     VxD = 002Ah
  2036. Note:    the desired VxD and service number are identified by the data
  2037.       immediately following the INT 20 instruction, as in:
  2038.         INT    20h
  2039.         DW    service number
  2040.         DW    VxD identifier
  2041. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2042.  
  2043. (Table 0956)
  2044. Values for VWIN32 (VxD ID 002Ah) service number:
  2045.  00h    "VWin32_Get_Version"
  2046.  01h    "VWin32_Wake_For_Event"
  2047.  02h    "_VWIN32_QueueUserApc"
  2048.  03h    "_VWIN32_Get_Thread_Context"
  2049.  04h    "_VWIN32_Set_Thread_Context"
  2050.  05h    "_VWIN32_CopyMem"
  2051.  06h    "_VWIN32_BlockForTermination"
  2052.  ...
  2053.  1Ch    ...last service for Windows95 SP1
  2054. SeeAlso: #0955,#0957
  2055. --------W-20----Vx002B-----------------------
  2056. INT 20 P - Microsoft Windows - VCOMM - VxD SERVICES
  2057.     VxD = 002Bh
  2058. Note:    the desired VxD and service number are identified by the data
  2059.       immediately following the INT 20 instruction, as in:
  2060.         INT    20h
  2061.         DW    service number
  2062.         DW    VxD identifier
  2063. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2064.  
  2065. (Table 0957)
  2066. Values for VCOMM (VxD ID 002Bh) service number:
  2067.  00h    "VCOMM_Get_Version"
  2068.  01h    "_VCOMM_Register_Port_Driver"
  2069.  02h    "_VCOMM_Acquire_Port"
  2070.  03h    "_VCOMM_Release_Port"
  2071.  04h    "_VCOMM_OpenComm"
  2072.  05h    "_VCOMM_SetCommState"
  2073.  06h    "_VCOMM_GetCommState"
  2074.  07h    "_VCOMM_SetupComm"
  2075.  08h    "_VCOMM_TransmitCommChar"
  2076.  09h    "_VCOMM_CloseComm"
  2077.  0Ah    "_VCOMM_GetCommQueueStatus"
  2078.  0Bh    "_VCOMM_ClearCommError"
  2079.  0Ch    "_VCOMM_GetModemStatus"
  2080.  0Dh    "_VCOMM_GetCommProperties"
  2081.  0Eh    "_VCOMM_EscapeCommFunction"
  2082.  0Fh    "_VCOMM_PurgeComm"
  2083.  10h    "_VCOMM_SetCommEventMask"
  2084.  11h    "_VCOMM_GetCommEventMask"
  2085.  12h    "_VCOMM_WriteComm"
  2086.  13h    "_VCOMM_ReadComm"
  2087.  14h    "_VCOMM_EnableCommNotification"
  2088.  15h    "_VCOMM_GetLastError"
  2089.  16h    "_VCOMM_Steal_Port"
  2090.  17h    "_VCOMM_SetReadCallBack"
  2091.  18h    "_VCOMM_SetWriteCallBack"
  2092.  19h    "_VCOMM_GetSetCommTimeouts"
  2093.  1Ah    "_VCOMM_SetWriteRequest"
  2094.  1Bh    "_VCOMM_SetReadRequest"
  2095.  1Ch    "_VCOMM_Dequeue_Request"
  2096.  ...
  2097.  22h    ...last service for Windows95 SP1
  2098. SeeAlso: #0956,#0958
  2099. --------W-20----Vx002C-----------------------
  2100. INT 20 P - Microsoft Windows - SPOOLER - VxD SERVICES
  2101.     VxD = 002Ch
  2102. Note:    the desired VxD and service number are identified by the data
  2103.       immediately following the INT 20 instruction, as in:
  2104.         INT    20h
  2105.         DW    service number
  2106.         DW    VxD identifier
  2107. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2108.  
  2109. (Table 0958)
  2110. Values for SPOOLER (VxD ID 002Ch) service number:
  2111.  00h    ???
  2112.  10h    ...last service for Windows95 SP1
  2113. SeeAlso: #0957,#0959
  2114. --------W-20----Vx0032-----------------------
  2115. INT 20 P - Microsoft Windows - VSERVER - VxD SERVICES
  2116.     VxD = 0032h
  2117. Note:    the desired VxD and service number are identified by the data
  2118.       immediately following the INT 20 instruction, as in:
  2119.         INT    20h
  2120.         DW    service number
  2121.         DW    VxD identifier
  2122. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2123.  
  2124. (Table 0959)
  2125. Values for VSERVER (VxD ID 0032h) service number:
  2126.  00h    get VSERVER version
  2127.     Return: CF clear
  2128.         EAX = version (AH = major, AL = minor)
  2129.         EBX = ??? (00000000h)
  2130.  01h    allocate ???
  2131.     AX = ???
  2132.     ESI = ???
  2133.     Return: CF clear if successful
  2134.         CF set on error (table full)
  2135.  02h    NOP???
  2136.     Return: EBX = 00000000h
  2137.  03h    ???
  2138.     Return: ZF clear
  2139. SeeAlso: #0958,#0960,INT 2F/AX=1684h/BX=0032h
  2140. --------W-20----Vx0033-----------------------
  2141. INT 20 P - Microsoft Windows - CONFIGMG - VxD SERVICES
  2142.     VxD = 0033h
  2143. Note:    the desired VxD and service number are identified by the data
  2144.       immediately following the INT 20 instruction, as in:
  2145.         INT    20h
  2146.         DW    service number
  2147.         DW    VxD identifier
  2148. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2149.  
  2150. (Table 0960)
  2151. Values for CONFIGMG (VxD ID 0033h) service number:
  2152.  00h    ???
  2153.  5Ah    ...last service for Windows95 SP1
  2154. Note:    the VxD services appear to be identical to the PM/V86 APIs on
  2155.       INT 2F/AX=1684h
  2156. SeeAlso: #0959,#0962,INT 2F/AX=1684h/BX=0033h
  2157. --------W-20----Vx0034-----------------------
  2158. INT 20 P - Microsoft Windows - DWCFGMG.SYS - VxD SERVICES
  2159.     VxD = 0034h
  2160. Note:    the desired VxD and service number are identified by the data
  2161.       immediately following the INT 20 instruction, as in:
  2162.         INT    20h
  2163.         DW    service number
  2164.         DW    VxD identifier
  2165. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2166.  
  2167. (Table 0961)
  2168. Values for DWCFGMG.SYS (VxD ID 0034h) service number:
  2169.  00h    "CM_GetVersion" get supported DDI version
  2170.     Return: EAX = 00000000h if not installed
  2171.         else
  2172.             AH = major version number
  2173.             AL = minor version number
  2174.             EBX = number of devices controlled by DWCFGMG.SYS
  2175.  01h    "CM_GetConfig" get device configuration
  2176.     EBX = device index
  2177.     EDI -> buffer for configuration information (see #2323)
  2178.     Return: EAX = status (0000h successful, 0001h index out of range)
  2179.  02h    "CM_LockConfig" lock device configuration
  2180.     EDI -> configuration information (see #2323)
  2181.     Return: EAX = status
  2182.             0000h successful
  2183.             0001h resource conflict
  2184.             0002h invalid request
  2185.  03h    "CM_UnlockConfig" unlock device configuration
  2186.     EDI -> configuration information (see #2323)
  2187.     Return: EAX = status (0000h successful, 0001h invalid request)
  2188.  04h    "CME_QueryResources"
  2189.  05h    "CME_AllocResources"
  2190.  06h    "CME_DeallocResources"
  2191. SeeAlso: INT 2F/AX=1684h/BX=0034h
  2192. --------W-20----Vx0036-----------------------
  2193. INT 20 P - Microsoft Windows - VFBACKUP - VxD SERVICES
  2194.     VxD = 0036h
  2195. Note:    the desired VxD and service number are identified by the data
  2196.       immediately following the INT 20 instruction, as in:
  2197.         INT    20h
  2198.         DW    service number
  2199.         DW    VxD identifier
  2200. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2201.  
  2202. (Table 0962)
  2203. Values for VFBACKUP (VxD ID 0036h) service number:
  2204.  00h    get version
  2205.     Return: CF clear
  2206.         EAX = version (AH = major, AL = minor)
  2207.  01h    ???
  2208.  02h    ???
  2209.  03h    ???
  2210.  04h    ???
  2211.  05h    ...last service for Windows95 SP1
  2212. SeeAlso: #0960,#0963
  2213. --------W-20----Vx0037-----------------------
  2214. INT 20 P - Microsoft Windows - ENABLE - VxD SERVICES
  2215.     VxD = 0037h
  2216. Note:    the desired VxD and service number are identified by the data
  2217.       immediately following the INT 20 instruction, as in:
  2218.         INT    20h
  2219.         DW    service number
  2220.         DW    VxD identifier
  2221. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2222.  
  2223. (Table 0963)
  2224. Values for ENABLE (VxD ID 0037h) service number:
  2225.  00h    get version
  2226.     Return: CF clear
  2227.         EAX = version (AH = major, AL = minor)
  2228.  01h    ??? (performs VMMCall 1800Eh, then falls through to service 04h)
  2229.     Return: EAX = system time???
  2230.  02h    get current ???
  2231.     Return: EAX = ???
  2232.  03h    ??? (schedules a global event via VMMCall 1800Eh)
  2233.     Return: ???
  2234.  04h    get system time??? (performs VMMCall 100CFh)
  2235.     Return: EAX = system time???
  2236.  05h    call ??? priority event
  2237.     Return: nothing
  2238.  06h    set ??? / get ???
  2239.     EDI -> buffer containing data to copy into VxD and space for results
  2240.     Return: EDI buffer updated
  2241.  07h    ???
  2242.     EBX = ??? flags (bits 2,15,17,18 checked)
  2243.     EDI -> ???
  2244.     ???
  2245.     Return: ???
  2246.  08h    ??? (schedules a global event via VMMCall 1800Eh)
  2247.     Return: ???
  2248.  09h    get ??? data
  2249.     EDI -> buffer for data (see #0964)
  2250.     Return:    EDI buffer updated if large enough
  2251. SeeAlso: #0962,#0965,#2325 at INT 2F/AX=1684h/BX=0037h
  2252.  
  2253. Format of ENABLE.VXD ??? data:
  2254. Offset    Size    Description    (Table 0964)
  2255.  00h    DWORD    (ret) length of data, including this word
  2256.         (call) length of buffer
  2257.  04h    DWORD    -> 24-byte (or larger) buffer
  2258.  08h    DWORD    -> 20-byte buffer
  2259.  0Ch    DWORD    -> 260-byte buffer
  2260.  10h    DWORD    -> 260-byte buffer
  2261. SeeAlso: #0963
  2262. --------W-20----Vx0038-----------------------
  2263. INT 20 P - Microsoft Windows - VCOND - VxD SERVICES
  2264.     VxD = 0038h
  2265. Note:    the desired VxD and service number are identified by the data
  2266.       immediately following the INT 20 instruction, as in:
  2267.         INT    20h
  2268.         DW    service number
  2269.         DW    VxD identifier
  2270. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2271.  
  2272. (Table 0965)
  2273. Values for VCOND (VxD ID 0038h) service number:
  2274.  00h    get VCOND version
  2275.     Return: CF clear
  2276.         EAX = version (AH = major, AL = minor)
  2277.  01h    ???
  2278. SeeAlso: #0966,#0963,#0967
  2279.  
  2280. (Table 0966)
  2281. Values for Windows95 VCOND (Vxd ID 0038h) Win32 service number:
  2282.  00h    get VCOND version
  2283.     Return: EAX = version (AH = major, AL = minor)
  2284.  ...
  2285.  34h    ...last Win32 service for Windows95 SP1
  2286. SeeAlso: #0965
  2287. --------W-20----Vx003D-----------------------
  2288. INT 20 P - Microsoft Windows - BIOS - VxD SERVICES
  2289.     VxD = 003Dh
  2290. Note:    the desired VxD and service number are identified by the data
  2291.       immediately following the INT 20 instruction, as in:
  2292.         INT    20h
  2293.         DW    service number
  2294.         DW    VxD identifier
  2295. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2296.  
  2297. (Table 0967)
  2298. Values for BIOS (VxD ID 003Dh) service number:
  2299.  00h    get version???
  2300.  01h    ???
  2301.  02h    ???
  2302.  03h    ???
  2303. SeeAlso: #0965,#0968
  2304. --------W-20----Vx003E-----------------------
  2305. INT 20 P - Microsoft Windows - WSOCK - VxD SERVICES
  2306.     VxD = 003Eh
  2307. Note:    the desired VxD and service number are identified by the data
  2308.       immediately following the INT 20 instruction, as in:
  2309.         INT    20h
  2310.         DW    service number
  2311.         DW    VxD identifier
  2312. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2313.  
  2314. (Table 0968)
  2315. Values for WSOCK (VxD ID 003Eh) service number:
  2316.  00h    get WSOCK version
  2317.     Return: CF clear
  2318.         AH = major version
  2319.         AL = minor version
  2320.         EAX high word = 0000h
  2321.  01h    ???
  2322.     EAX = ??? or 00000000h
  2323.     Return: CF clear if successful
  2324.             EAX = 00000000h
  2325.         CF set on error
  2326.             EAX = ???
  2327.  02h    ???
  2328.     EAX = ??? or 00000000h
  2329.     Return: ???
  2330.  03h    ???
  2331.  04h    ...last service for Windows95 SP1
  2332. SeeAlso: #0967,#0969
  2333. --------W-20----Vx0040-----------------------
  2334. INT 20 P - Microsoft Windows - IFSMgr - VxD SERVICES
  2335.     VxD = 0040h
  2336. Note:    the desired VxD and service number are identified by the data
  2337.       immediately following the INT 20 instruction, as in:
  2338.         INT    20h
  2339.         DW    service number
  2340.         DW    VxD identifier
  2341. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2342.  
  2343. (Table 0969)
  2344. Values for IFSMGR (VxD ID 0040h) service number:
  2345.  00h    get version
  2346.  01h    "RegisterMount"
  2347.  02h    "RegisterNet"
  2348.  03h    "RegisterMailSlot"
  2349.  04h    "Attach"
  2350.  05h    "Detach"
  2351.  06h    "Get_NetTime"
  2352.  07h    "Get_DOSTime"
  2353.  08h    "SetupConnection"
  2354.  09h    "DerefConnection"
  2355.  0Ah    "ServerDOSCall"
  2356.  0Bh    "CompleteAsync"
  2357.  0Ch    "RegisterHeap"
  2358.  0Dh    "GetHeap"
  2359.  0Eh    "RetHeap"
  2360.  0Fh    "CheckHeap"
  2361.  10h    "CheckHeapItem"
  2362.  11h    "FillHeapSpare"
  2363.  12h    "Block"
  2364.  13h    "Wakeup"
  2365.  14h    "Yield"
  2366.  15h    "SchedEvent"
  2367.  16h    "QueueEvent"
  2368.  17h    "KillEvent"
  2369.  18h    "FreeIOReg"
  2370.  19h    "MakeMailSlot"
  2371.  1Ah    "DeleteMailSlot"
  2372.  1Bh    "WriteMailSlot"
  2373.  1Ch    "PopUp"
  2374.  1Dh    "printf"
  2375.  1Eh    "AssertFailed"
  2376.  1Fh    "LogEntry"
  2377.  20h    "DebugMenu"
  2378.  21h    "DebugVars"
  2379.  22h    "GetDebugString"
  2380.  23h    "GetDebugHexNum"
  2381.  24h    "NetFunction"
  2382.  25h    "DoDelAllUses"
  2383.  26h    "SetErrString"
  2384.  27h    "GetErrString"
  2385.  28h    "SetReqHook"
  2386.  29h    "SetPathHook"
  2387.  2Ah    "UseAdd"
  2388.  2Bh    "UseDel"
  2389.  2Ch    "InitUseAdd"
  2390.  2Dh    "ChangeDir"
  2391.  2Eh    "DelAllUses"
  2392.  2Fh    "CDROM_Attach"
  2393.  30h    "CDROM_Detach"
  2394.  31h    "Win32DupHandle"
  2395.  32h    "Ring0_FileIO"
  2396.  33h    "Toggle_Extended_File_Handle"
  2397.  34h    "IFSMgr_GetDrive_Info"
  2398.  35h    "IFSMgr_Ring0GetDriveInfo"
  2399.  36h    "IFSMgr_BlockNoEvents"
  2400.  37h    "IFSMgr_NetToDosTime"
  2401.  38h    "IFSMgr_DosToNetTime"
  2402.  39h    "IFSMgr_DosToWin32Time"
  2403.  3Ah    "IFSMgr_Win32ToDosTime"
  2404.  3Bh    "IFSMgr_NetToWin32Time"
  2405.  3Ch    "IFSMgr_Win32ToNetTime"
  2406.  3Dh    "IFSMgr_MetaMatch"
  2407.  3Eh    "IFSMgr_TransMatch"
  2408.  3Fh    "IFSMgr_CallProvider"
  2409.  40h    "UniToBCS"
  2410.  41h    "UniToBCSPath"
  2411.  42h    "BCSToUni"
  2412.  43h    "UniToUpper"
  2413.  44h    "UniCharToOEM"
  2414.  45h    "CreateBasis"
  2415.  46h    "MatchBasisName"
  2416.  47h    "AppendBasisTail"
  2417.  48h    "FcbToShort"
  2418.  49h    "ShortToFcb"
  2419.  4Ah    "IFSMgr_ParsePath"
  2420.  4Bh    "Query_PhysLock"
  2421.  4Ch    "_VolFlush"
  2422.  4Dh    "NotifyVolumeArrival"
  2423.  4Eh    "NotifyVolumeRemoval"
  2424.  4Fh    "QueryVolumeRemoval"
  2425.  50h    "IFSMgr_FSDUnmountCFSD"
  2426.  51h    "IFSMgr_GetConversionTablePtrs"
  2427.  52h    "IFSMgr_CheckAccessConflict"
  2428.  53h    "IFSMgr_LockFile"
  2429.  54h    "IFSMgr_UnlockFile"
  2430.  55h    "IFSMgr_RemoveLocks"
  2431.  56h    "IFSMgr_CheckLocks"
  2432.  57h    "IFSMgr_CountLocks"
  2433.  58h    "IFSMgr_ReassignLockFileInst"
  2434.  59h    "IFSMgr_UnassignLockList"
  2435.  5Ah    "IFSMgr_MountChildVolume"
  2436.  5Bh    "IFSMgr_UnmountChildVolume"
  2437.  5Ch    "IFSMgr_SwapDrives"
  2438.  5Dh    "IFSMgr_FSDMapFHtoIOREQ"
  2439.  5Eh    "IFSMgr_FSDParsePath"
  2440.  5Fh    "IFSMgr_FSDAttachSFT"
  2441.  60h    "IFSMgr_GetTimeZoneBias"
  2442.  61h    "IFSMgr_PNPEvent"
  2443.  62h    "IFSMgr_RegisterCFSD"
  2444.  63h    "IFSMgr_Win32MapExtendedHandleToSFT"
  2445.  64h    "IFSMgr_DbgSetFileHandleLimit"
  2446.  65h    "IFSMgr_Win32MapSFTToExtendedHandle"
  2447.  66h    "IFSMgr_FSDGetCurrentDrive"
  2448.  ...
  2449.  74h    ...last service for Windows95 SP1
  2450. SeeAlso: #0968,#0970
  2451. --------W-20----Vx0041-----------------------
  2452. INT 20 P - Microsoft Windows - VCDFSD - VxD SERVICES
  2453.     VxD = 0041h
  2454. Note:    the desired VxD and service number are identified by the data
  2455.       immediately following the INT 20 instruction, as in:
  2456.         INT    20h
  2457.         DW    service number
  2458.         DW    VxD identifier
  2459. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2460.  
  2461. (Table 0970)
  2462. Values for VCDFSD (VxD ID 0041h) service number:
  2463.  00h    get VCDFSD version???
  2464.  01h    ???
  2465.  02h    ???
  2466.  03h    ???
  2467. SeeAlso: #0969,#0971
  2468. --------W-20----Vx0048-----------------------
  2469. INT 20 P - Microsoft Windows - PERF - VxD SERVICES
  2470.     VxD = 0048h
  2471. Note:    the desired VxD and service number are identified by the data
  2472.       immediately following the INT 20 instruction, as in:
  2473.         INT    20h
  2474.         DW    service number
  2475.         DW    VxD identifier
  2476. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2477.  
  2478. (Table 0971)
  2479. Values for PERF (VxD ID 0048h) service number:
  2480.  00h    get version
  2481.     Return: CF clear
  2482.         EAX = version (AH = major, AL = minor)
  2483.  01h    start performance monitoring??? (creates/sets a registry key)
  2484.  02h    end performance monitoring??? (deletes registry key)
  2485.  03h    start performance monitoring??? (creates/sets a registry key)
  2486.  04h    end performance monitoring??? (deletes registry key)
  2487. SeeAlso: #0970,#0972
  2488. --------W-20----Vx011F-----------------------
  2489. INT 20 P - Microsoft Windows - VFLATD - VxD SERVICES
  2490.     VxD = 011Fh
  2491. Note:    the desired VxD and service number are identified by the data
  2492.       immediately following the INT 20 instruction, as in:
  2493.         INT    20h
  2494.         DW    service number
  2495.         DW    VxD identifier
  2496. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2497.  
  2498. (Table 0972)
  2499. Values for VFLATD (VxD ID 011Fh) service number:
  2500.  00h    get VFLATD version???
  2501.  01h    ???
  2502. SeeAlso: #0971,#0973
  2503. --------W-20----Vx0449-----------------------
  2504. INT 20 P - Microsoft Windows - vjoyd - VxD SERVICES
  2505.     VxD = 0449h
  2506. Note:    the desired VxD and service number are identified by the data
  2507.       immediately following the INT 20 instruction, as in:
  2508.         INT    20h
  2509.         DW    service number
  2510.         DW    VxD identifier
  2511. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2512.  
  2513. (Table 0973)
  2514. Values for vjoyd (VxD ID 0449h) service number:
  2515.  00h    get vjoyd version???
  2516.  01h    ???
  2517. SeeAlso: #0972,#0974
  2518. --------W-20----Vx044A-----------------------
  2519. INT 20 P - Microsoft Windows - mmdevldr - VxD SERVICES
  2520.     VxD = 044Ah
  2521. Note:    the desired VxD and service number are identified by the data
  2522.       immediately following the INT 20 instruction, as in:
  2523.         INT    20h
  2524.         DW    service number
  2525.         DW    VxD identifier
  2526. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2527.  
  2528. (Table 0974)
  2529. Values for mmdevldr (VxD ID 044Ah) service number:
  2530.  00h    get mmdevldr version???
  2531.  01h    ???
  2532.  02h    ???
  2533.  03h    ???
  2534.  04h    ???
  2535.  05h    ???
  2536. SeeAlso: #0973,#0975
  2537. --------W-20----Vx0480-----------------------
  2538. INT 20 P - Microsoft Windows - VNetSup - VxD SERVICES
  2539.     VxD = 0480h
  2540. Note:    the desired VxD and service number are identified by the data
  2541.       immediately following the INT 20 instruction, as in:
  2542.         INT    20h
  2543.         DW    service number
  2544.         DW    VxD identifier
  2545. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2546.  
  2547. (Table 0975)
  2548. Values for VNetSup (VxD ID 0480h) service number:
  2549.  00h    get VNetSup version???
  2550.  01h    ???
  2551.  02h    ???
  2552.  03h    ???
  2553.  04h    ???
  2554.  05h    ???
  2555.  06h    ???
  2556. SeeAlso: #0974,#0976
  2557. --------W-20----Vx0481-----------------------
  2558. INT 20 P - Microsoft Windows - VREDIR - VxD SERVICES
  2559.     VxD = 0481h
  2560. Note:    the desired VxD and service number are identified by the data
  2561.       immediately following the INT 20 instruction, as in:
  2562.         INT    20h
  2563.         DW    service number
  2564.         DW    VxD identifier
  2565. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2566.  
  2567. (Table 0976)
  2568. Values for VREDIR (VxD ID 0481h) service number:
  2569.  00h    ???
  2570.  10h    ...last service for Windows95 SP1
  2571. SeeAlso: #0975,#0977
  2572. --------W-20----Vx0483-----------------------
  2573. INT 20 P - Microsoft Windows - VSHARE - VxD SERVICES
  2574.     VxD = 0483h
  2575. Note:    the desired VxD and service number are identified by the data
  2576.       immediately following the INT 20 instruction, as in:
  2577.         INT    20h
  2578.         DW    service number
  2579.         DW    VxD identifier
  2580. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2581.  
  2582. (Table 0977)
  2583. Values for VSHARE (VxD ID 0483h) service number:
  2584.  00h    get VSHARE version???
  2585. SeeAlso: #0976,#0978
  2586. --------W-20----Vx0487-----------------------
  2587. INT 20 P - Microsoft Windows - NWLINK - VxD SERVICES
  2588.     VxD = 0487h
  2589. Note:    the desired VxD and service number are identified by the data
  2590.       immediately following the INT 20 instruction, as in:
  2591.         INT    20h
  2592.         DW    service number
  2593.         DW    VxD identifier
  2594. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2595.  
  2596. (Table 0978)
  2597. Values for NWLINK (VxD ID 0487h) service number:
  2598.  00h    get NWLINK version???
  2599.  01h    ???
  2600.  06h    ...last service for Windows95 SP1
  2601. SeeAlso: #0977,#0979,#2290
  2602. --------W-20----Vx0488-----------------------
  2603. INT 20 P - Microsoft Windows - VTDI - VxD SERVICES
  2604.     VxD = 0488h
  2605. Note:    the desired VxD and service number are identified by the data
  2606.       immediately following the INT 20 instruction, as in:
  2607.         INT    20h
  2608.         DW    service number
  2609.         DW    VxD identifier
  2610. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2611.  
  2612. (Table 0979)
  2613. Values for VTDI (VxD ID 0488h) service number:
  2614.  00h    get VTDI version???
  2615.  01h    ???
  2616.  0Dh    ...last service for Windows95 SP1
  2617. SeeAlso: #0978,#0980
  2618. --------W-20----Vx0489-----------------------
  2619. INT 20 P - Microsoft Windows - VIP - VxD SERVICES
  2620.     VxD = 0489h
  2621. Note:    the desired VxD and service number are identified by the data
  2622.       immediately following the INT 20 instruction, as in:
  2623.         INT    20h
  2624.         DW    service number
  2625.         DW    VxD identifier
  2626. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2627.  
  2628. (Table 0980)
  2629. Values for VIP (VxD ID 0489h) service number:
  2630.  00h    get VIP version???
  2631.  01h    ???
  2632.  08h    ...last service for Windows95 SP1
  2633. SeeAlso: #0979,#0981
  2634. --------W-20----Vx048A-----------------------
  2635. INT 20 P - Microsoft Windows - MSTCP - VxD SERVICES
  2636.     VxD = 048Ah
  2637. Note:    the desired VxD and service number are identified by the data
  2638.       immediately following the INT 20 instruction, as in:
  2639.         INT    20h
  2640.         DW    service number
  2641.         DW    VxD identifier
  2642. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2643.  
  2644. (Table 0981)
  2645. Values for MSTCP (VxD ID 048Ah) service number:
  2646.  00h    get MSTCP version???
  2647. SeeAlso: #0980,#0982
  2648. --------W-20----Vx048B-----------------------
  2649. INT 20 P - Microsoft Windows - VCACHE - VxD SERVICES
  2650.     VxD = 048Bh
  2651. Note:    the desired VxD and service number are identified by the data
  2652.       immediately following the INT 20 instruction, as in:
  2653.         INT    20h
  2654.         DW    service number
  2655.         DW    VxD identifier
  2656. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2657.  
  2658. (Table 0982)
  2659. Values for VCACHE (VxD ID 048Bh) service number:
  2660.  00h    "VCACHE_Get_Version"
  2661.  01h    "VCACHE_Register"
  2662.  02h    "VCACHE_GetSize"
  2663.  03h    "VCACHE_CheckAvail"
  2664.  04h    "VCACHE_FindBlock"
  2665.  05h    "VCACHE_FreeBlock"
  2666.  06h    "VCACHE_MakeMRU"
  2667.  07h    "VCACHE_Hold"
  2668.  08h    "VCACHE_Unhold"
  2669.  09h    "VCACHE_Enum"
  2670.  0Ah    "VCACHE_TestHandle"
  2671.  0Bh    "VCACHE_VerifySums"
  2672.  0Ch    "VCACHE_RecalcSums"
  2673.  0Dh    "VCACHE_TestHold"
  2674.  0Eh    "VCACHE_GetStats"
  2675.  ...
  2676.  18h    ...last service for Windows95 SP1
  2677. SeeAlso: #0981,#0983
  2678. --------W-20----Vx048E-----------------------
  2679. INT 20 P - Microsoft Windows - NWREDIR - VxD SERVICES
  2680.     VxD = 048Eh
  2681. Note:    the desired VxD and service number are identified by the data
  2682.       immediately following the INT 20 instruction, as in:
  2683.         INT    20h
  2684.         DW    service number
  2685.         DW    VxD identifier
  2686. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2687.  
  2688. (Table 0983)
  2689. Values for NWREDIR (VxD ID 048Eh) service number:
  2690.  00h    get NWREDIR version???
  2691.  01h    ???
  2692. SeeAlso: #0982,#0984
  2693. --------W-20----Vx0491-----------------------
  2694. INT 20 P - Microsoft Windows - FILESEC - VxD SERVICES
  2695.     VxD = 0491h
  2696. Note:    the desired VxD and service number are identified by the data
  2697.       immediately following the INT 20 instruction, as in:
  2698.         INT    20h
  2699.         DW    service number
  2700.         DW    VxD identifier
  2701. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2702.  
  2703. (Table 0984)
  2704. Values for FILESEC (VxD ID 0491h) service number:
  2705.  00h    get FILESEC version???
  2706.  01h    ???
  2707.  10h    ...last service for Windows95 SP1
  2708. SeeAlso: #0983,#0985
  2709. --------W-20----Vx0492-----------------------
  2710. INT 20 P - Microsoft Windows - NWSERVER - VxD SERVICES
  2711.     VxD = 0492h
  2712. Note:    the desired VxD and service number are identified by the data
  2713.       immediately following the INT 20 instruction, as in:
  2714.         INT    20h
  2715.         DW    service number
  2716.         DW    VxD identifier
  2717. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2718.  
  2719. (Table 0985)
  2720. Values for NWSERVER (VxD ID 0492h) service number:
  2721.  00h    get NWSERVER version???
  2722.  01h    ???
  2723.  02h    ???
  2724.  03h    ???
  2725. SeeAlso: #0984,#0986
  2726. --------W-20----Vx0493-----------------------
  2727. INT 20 P - Microsoft Windows - MSSP / NWSP - VxD SERVICES
  2728.     VxD = 0493h
  2729. Note:    the desired VxD and service number are identified by the data
  2730.       immediately following the INT 20 instruction, as in:
  2731.         INT    20h
  2732.         DW    service number
  2733.         DW    VxD identifier
  2734. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2735.  
  2736. (Table 0986)
  2737. Values for MSSP/NWSP (VxD ID 0493h) service number:
  2738.  00h    get NSSP / NWSP version???
  2739.  01h    ???
  2740.  06h    ...last service for Windows95 SP1
  2741. SeeAlso: #0985,#0987
  2742. --------W-20----Vx0494-----------------------
  2743. INT 20 P - Microsoft Windows - NSCL - VxD SERVICES
  2744.     VxD = 0494h
  2745. Note:    the desired VxD and service number are identified by the data
  2746.       immediately following the INT 20 instruction, as in:
  2747.         INT    20h
  2748.         DW    service number
  2749.         DW    VxD identifier
  2750. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2751.  
  2752. (Table 0987)
  2753. Values for NSCL (VxD ID 0494h)    service number:
  2754.  00h    get NSCL version???
  2755.  01h    ???
  2756.  02h    ???
  2757. SeeAlso: #0986,#0988
  2758. --------W-20----Vx0495-----------------------
  2759. INT 20 P - Microsoft Windows - AFVXD - VxD SERVICES
  2760.     VxD = 0495h
  2761. Note:    the desired VxD and service number are identified by the data
  2762.       immediately following the INT 20 instruction, as in:
  2763.         INT    20h
  2764.         DW    service number
  2765.         DW    VxD identifier
  2766. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2767.  
  2768. (Table 0988)
  2769. Values for AFVXD (VxD ID 0495h) service number:
  2770.  00h    get version
  2771.     Return: CF clear
  2772.         AX = version (AH = high, AL = low)
  2773.  01h    ???
  2774.     EAX -> ???
  2775.     EBX -> ???
  2776.     ECX = ???
  2777.     Return:    ???
  2778.  02h    ???
  2779.     EAX -> ???
  2780.     Return: ???
  2781. SeeAlso: #0987,#0989
  2782. --------W-20----Vx0496-----------------------
  2783. INT 20 P - Microsoft Windows - NDIS2SUP - VxD SERVICES
  2784.     VxD = 0496h
  2785. Note:    the desired VxD and service number are identified by the data
  2786.       immediately following the INT 20 instruction, as in:
  2787.         INT    20h
  2788.         DW    service number
  2789.         DW    VxD identifier
  2790. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2791.  
  2792. (Table 0989)
  2793. Values for NDIS2SUP (VxD ID 0496h) service number:
  2794.  00h    get NDIS2SUP version???
  2795.  01h    ???
  2796. SeeAlso: #0988,#0990
  2797. --------W-20----Vx0498-----------------------
  2798. INT 20 P - Microsoft Windows - Splitter - VxD SERVICES
  2799.     VxD = 0498h
  2800. Note:    the desired VxD and service number are identified by the data
  2801.       immediately following the INT 20 instruction, as in:
  2802.         INT    20h
  2803.         DW    service number
  2804.         DW    VxD identifier
  2805. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2806.  
  2807. (Table 0990)
  2808. Values for Splitter (VxD ID 0498h) service number:
  2809.  00h    get Splitter version
  2810.     Return:    CF clear
  2811.         EAX = version (00000001h)
  2812.  01h    ???
  2813.  02h    ???
  2814.  03h    hook/unhook VMM "hook device service" service
  2815.     EAX = request (0 = unhook, nonzero = hook)
  2816.     Return: if EAX nonzero on entry, Splitter's service 04h replaces VMM
  2817.           service 0090h; otherwise, default handler is restored
  2818.  04h    Splitter "hook device service" handler
  2819. SeeAlso: #0989,#0991
  2820. --------W-20----Vx0499-----------------------
  2821. INT 20 P - Microsoft Windows - PPPMAC - VxD SERVICES
  2822.     VxD = 0499h
  2823. Note:    the desired VxD and service number are identified by the data
  2824.       immediately following the INT 20 instruction, as in:
  2825.         INT    20h
  2826.         DW    service number
  2827.         DW    VxD identifier
  2828. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2829.  
  2830. (Table 0991)
  2831. Values for PPPMAC (VxD ID 0499h) service number:
  2832.  00h    ???
  2833.  09h    ...last service for Windows95 SP1
  2834. SeeAlso: #0990,#0992,#2290
  2835. --------W-20----Vx049A-----------------------
  2836. INT 20 P - Microsoft Windows - VDHCP - VxD SERVICES
  2837.     VxD = 049Ah
  2838. Note:    the desired VxD and service number are identified by the data
  2839.       immediately following the INT 20 instruction, as in:
  2840.         INT    20h
  2841.         DW    service number
  2842.         DW    VxD identifier
  2843. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2844.  
  2845. (Table 0992)
  2846. Values for VDHCP (VxD ID 049Ah) service number:
  2847.  00h    get VDHCP version???
  2848.  01h    ???
  2849.  02h    ???
  2850.  03h    ???
  2851. SeeAlso: #0991,#0993
  2852. --------W-20----Vx049B-----------------------
  2853. INT 20 P - Microsoft Windows - VNBT - VxD SERVICES
  2854.     VxD = 049Bh
  2855. Note:    the desired VxD and service number are identified by the data
  2856.       immediately following the INT 20 instruction, as in:
  2857.         INT    20h
  2858.         DW    service number
  2859.         DW    VxD identifier
  2860. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2861.  
  2862. (Table 0993)
  2863. Values for VNBT (VxD ID 049Bh) service number:
  2864.  00h    get VNBT version???
  2865. SeeAlso: #0992,#0994
  2866. --------W-20----Vx049D-----------------------
  2867. INT 20 P - Microsoft Windows - LOGGER - VxD SERVICES
  2868.     VxD = 049Dh
  2869. Note:    the desired VxD and service number are identified by the data
  2870.       immediately following the INT 20 instruction, as in:
  2871.         INT    20h
  2872.         DW    service number
  2873.         DW    VxD identifier
  2874. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2875.  
  2876. (Table 0994)
  2877. Values for LOGGER (VxD ID 049Dh) service number:
  2878.  00h    get LOGGER version???
  2879.  01h    ???
  2880.  02h    ???
  2881.  03h    ???
  2882.  04h    ???
  2883. SeeAlso: #0993,#0995
  2884. --------W-20----Vx3098-----------------------
  2885. INT 20 P - QEMM - VstlthD - VxD SERVICES
  2886.     VxD = 3098h
  2887. Note:    the desired VxD and service number are identified by the data
  2888.       immediately following the INT 20 instruction, as in:
  2889.         INT    20h
  2890.         DW    service number
  2891.         DW    VxD identifier
  2892. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2893.  
  2894. (Table 0995)
  2895. Values for VStlthD (VxD ID 3098h) service number:
  2896.  00h    get version
  2897.     Return:    CF clear
  2898.         EAX = version (AH = major, AL = BCD minor)
  2899.  01h    ???
  2900.  02h    get current ???
  2901.     Return: CF clear
  2902.         EDX = current value of ???
  2903.  03h    ???
  2904. SeeAlso: #0994,#0996
  2905. --------W-20----Vx30F6-----------------------
  2906. INT 20 P - Microsoft Windows - WSVV - VxD SERVICES
  2907.     VxD = 30F6h
  2908. Note:    the desired VxD and service number are identified by the data
  2909.       immediately following the INT 20 instruction, as in:
  2910.         INT    20h
  2911.         DW    service number
  2912.         DW    VxD identifier
  2913. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2914.  
  2915. (Table 0996)
  2916. Values for WSVV (VxD ID 30F6h) service number:
  2917.  00h    get WSVV version???
  2918. SeeAlso: #0995,#0997
  2919. --------W-20----Vx33FC-----------------------
  2920. INT 20 P - Microsoft Windows - APSIENUM - VxD SERVICES
  2921.     VxD = 33FCh
  2922. Note:    the desired VxD and service number are identified by the data
  2923.       immediately following the INT 20 instruction, as in:
  2924.         INT    20h
  2925.         DW    service number
  2926.         DW    VxD identifier
  2927. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2928.  
  2929. (Table 0997)
  2930. Values for ASPIENUM (VxD ID 33FCh) service number:
  2931.  00h    get ASPIENUM version???
  2932.  01h    ???
  2933.  02h    ???
  2934.  03h    ???
  2935. SeeAlso: #0996,#0998
  2936. --------W-20----Vx357E-----------------------
  2937. INT 20 P - Microsoft Windows - DSOUND - VxD SERVICES
  2938.     VxD = 357Eh
  2939. Note:    the desired VxD and service number are identified by the data
  2940.       immediately following the INT 20 instruction, as in:
  2941.         INT    20h
  2942.         DW    service number
  2943.         DW    VxD identifier
  2944. SeeAlso: INT 2F/AX=1684h"DEVICE API",INT 30"Windows",#0930,#0998
  2945.  
  2946. (Table 0998)
  2947. Values for DSOUND (VxD ID 357Eh) service number:
  2948.  00h    get DSOUND version???
  2949.  01h    ???
  2950.  02h    ???
  2951. SeeAlso: #0997,#2290
  2952. --------G-21---------------------------------
  2953. INT 21 - COMTROL HOSTESS i/ISA DEBUGGER - GET SEGMENT FOR CONTROL PROGRAM USE
  2954.     ???
  2955. Return: AX = first segment available for control program use
  2956. SeeAlso: INT 20"COMTROL",INT 22"COMTROL"
  2957. --------D-2100-------------------------------
  2958. INT 21 - DOS 1+ - TERMINATE PROGRAM
  2959.     AH = 00h
  2960.     CS = PSP segment
  2961. Notes:    Microsoft recommends using INT 21/AH=4Ch for DOS 2+
  2962.     this function sets the program's return code (ERRORLEVEL) to 00h
  2963.     execution continues at the address stored in INT 22 after DOS performs
  2964.       whatever cleanup it needs to do (restoring the INT 22,INT 23,INT 24
  2965.       vectors from the PSP assumed to be located at offset 0000h in the
  2966.       segment indicated by the stack copy of CS, etc.)
  2967.     if the PSP is its own parent, the process's memory is not freed; if
  2968.       INT 22 additionally points into the terminating program, the
  2969.       process is effectively NOT terminated
  2970.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  2971. SeeAlso: AH=26h,AH=31h,AH=4Ch,INT 20,INT 22
  2972. --------D-2101-------------------------------
  2973. INT 21 - DOS 1+ - READ CHARACTER FROM STANDARD INPUT, WITH ECHO
  2974.     AH = 01h
  2975. Return: AL = character read
  2976. Notes:    ^C/^Break are checked, and INT 23 executed if read
  2977.     ^P toggles the DOS-internal echo-to-printer flag
  2978.     ^Z is not interpreted, thus not causing an EOF if input is redirected
  2979.     character is echoed to standard output
  2980.     standard input is always the keyboard and standard output the screen
  2981.       under DOS 1.x, but they may be redirected under DOS 2+
  2982. SeeAlso: AH=06h,AH=07h,AH=08h,AH=0Ah
  2983. --------v-21010F-----------------------------
  2984. INT 21 - VIRUS - "Susan" - INSTALLATION CHECK
  2985.     AX = 010Fh
  2986. Return: AX = 7553h ("Su") if resident
  2987. SeeAlso: INT 16/AH=DDh"VIRUS",INT 21/AX=0B56h
  2988. --------D-2102-------------------------------
  2989. INT 21 - DOS 1+ - WRITE CHARACTER TO STANDARD OUTPUT
  2990.     AH = 02h
  2991.     DL = character to write
  2992. Return: AL = last character output (despite the official docs which state
  2993.         nothing is returned) (at least DOS 2.1-7.0)
  2994. Notes:    ^C/^Break are checked, and INT 23 executed if pressed
  2995.     standard output is always the screen under DOS 1.x, but may be
  2996.       redirected under DOS 2+
  2997.     the last character output will be the character in DL unless DL=09h
  2998.       on entry, in which case AL=20h as tabs are expanded to blanks
  2999.     if standard output is redirected to a file, no error checks (write-
  3000.       protected, full media, etc.) are performed
  3001. SeeAlso: AH=06h,AH=09h
  3002. --------D-2103-------------------------------
  3003. INT 21 - DOS 1+ - READ CHARACTER FROM STDAUX
  3004.     AH = 03h
  3005. Return: AL = character read
  3006. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  3007.     STDAUX is usually the first serial port
  3008. SeeAlso: AH=04h,INT 14/AH=02h,INT E0/CL=03h
  3009. --------D-2104-------------------------------
  3010. INT 21 - DOS 1+ - WRITE CHARACTER TO STDAUX
  3011.     AH = 04h
  3012.     DL = character to write
  3013. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  3014.     STDAUX is usually the first serial port
  3015.     if STDAUX is busy, this function will wait until it becomes free
  3016. SeeAlso: AH=03h,INT 14/AH=01h,INT E0/CL=04h
  3017. --------D-2105-------------------------------
  3018. INT 21 - DOS 1+ - WRITE CHARACTER TO PRINTER
  3019.     AH = 05h
  3020.     DL = character to print
  3021. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  3022.     STDPRN is usually the first parallel port, but may be redirected under
  3023.       DOS 2+
  3024.     if the printer is busy, this function will wait
  3025. SeeAlso: INT 17/AH=00h
  3026. --------D-2106-------------------------------
  3027. INT 21 - DOS 1+ - DIRECT CONSOLE OUTPUT
  3028.     AH = 06h
  3029.     DL = character (except FFh)
  3030. Return: AL = character output (despite official docs which state nothing is
  3031.         returned) (at least DOS 2.1-7.0)
  3032. Notes:    does not check ^C/^Break
  3033.     writes to standard output, which is always the screen under DOS 1.x,
  3034.       but may be redirected under DOS 2+
  3035. SeeAlso: AH=02h,AH=09h
  3036. --------D-2106--DLFF-------------------------
  3037. INT 21 - DOS 1+ - DIRECT CONSOLE INPUT
  3038.     AH = 06h
  3039.     DL = FFh
  3040. Return: ZF set if no character available
  3041.         AL = 00h
  3042.     ZF clear if character available
  3043.         AL = character read
  3044. Notes:    ^C/^Break are NOT checked
  3045.     if the returned character is 00h, the user pressed a key with an
  3046.       extended keycode, which will be returned by the next call of this
  3047.       function
  3048.     this function reads from standard input, which is always the keyboard
  3049.       under DOS 1.x, but may be redirected under DOS 2+
  3050.     although the return of AL=00h when no characters are available is not
  3051.       documented, some programs rely on this behavior
  3052. SeeAlso: AH=0Bh
  3053. --------D-2107-------------------------------
  3054. INT 21 - DOS 1+ - DIRECT CHARACTER INPUT, WITHOUT ECHO
  3055.     AH = 07h
  3056. Return: AL = character read from standard input
  3057. Notes:    does not check ^C/^Break
  3058.     standard input is always the keyboard under DOS 1.x, but may be
  3059.       redirected under DOS 2+
  3060.     if the interim console flag is set (see AX=6301h), partially-formed
  3061.       double-byte characters may be returned
  3062. SeeAlso: AH=01h,AH=06h,AH=08h,AH=0Ah
  3063. --------D-2108-------------------------------
  3064. INT 21 - DOS 1+ - CHARACTER INPUT WITHOUT ECHO
  3065.     AH = 08h
  3066. Return: AL = character read from standard input
  3067. Notes:    ^C/^Break are checked, and INT 23 executed if detected
  3068.     standard input is always the keyboard under DOS 1.x, but may be
  3069.       redirected under DOS 2+
  3070.     if the interim console flag is set (see AX=6301h), partially-formed
  3071.       double-byte characters may be returned
  3072. SeeAlso: AH=01h,AH=06h,AH=07h,AH=0Ah,AH=64h"DOS 3.2+"
  3073. --------D-2109-------------------------------
  3074. INT 21 - DOS 1+ - WRITE STRING TO STANDARD OUTPUT
  3075.     AH = 09h
  3076.     DS:DX -> '$'-terminated string
  3077. Return: AL = 24h (the '$' terminating the string, despite official docs which
  3078.         state that nothing is returned) (at least DOS 2.1-7.0 and
  3079.         NWDOS)
  3080. Notes:    ^C/^Break are checked, and INT 23 is called if either pressed
  3081.     standard output is always the screen under DOS 1.x, but may be
  3082.       redirected under DOS 2+
  3083.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  3084. SeeAlso: AH=02h,AH=06h"OUTPUT"
  3085. --------D-210A-------------------------------
  3086. INT 21 - DOS 1+ - BUFFERED INPUT
  3087.     AH = 0Ah
  3088.     DS:DX -> buffer (see #0999)
  3089. Return: buffer filled with user input
  3090. Notes:    ^C/^Break are checked, and INT 23 is called if either detected
  3091.     reads from standard input, which may be redirected under DOS 2+
  3092.     if the maximum buffer size (see #0999) is set to 00h, this call returns
  3093.       immediately without reading any input
  3094. SeeAlso: AH=0Ch,INT 2F/AX=4810h
  3095.  
  3096. Format of DOS input buffer:
  3097. Offset    Size    Description    (Table 0999)
  3098.  00h    BYTE    maximum characters buffer can hold
  3099.  01h    BYTE    (call) number of chars from last input which may be recalled
  3100.         (ret) number of characters actually read, excluding CR
  3101.  02h  N BYTEs    actual characters read, including the final carriage return
  3102. --------K-210A00-----------------------------
  3103. INT 21 - WCED v1.6+ - INSTALLATION CHECK
  3104.     AX = 0A00h
  3105.     DS:DX -> 6-byte buffer whose first two bytes must be 00h
  3106. Return: buffer offset 02h-05h filled with "Wced" if installed
  3107. Program: WCED is a free command-line editor and history utility by Stuart
  3108.       Russell
  3109. SeeAlso: AH=FFh"CED"
  3110. --------D-210B-------------------------------
  3111. INT 21 - DOS 1+ - GET STDIN STATUS
  3112.     AH = 0Bh
  3113. Return: AL = status
  3114.         00h if no character available
  3115.         FFh if character is available
  3116. Notes:    ^C/^Break are checked, and INT 23 is called if either pressed
  3117.     standard input is always the keyboard under DOS 1.x, but may be
  3118.       redirected under DOS 2+
  3119.     if the interim console flag is set (see AX=6301h), this function
  3120.       returns AL=FFh if a partially-formed double-byte character is
  3121.       available
  3122. SeeAlso: AH=06h"INPUT",AX=4406h
  3123. --------v-210B56-----------------------------
  3124. INT 21 - VIRUS - "Perfume" - INSTALLATION CHECK
  3125.     AX = 0B56h
  3126. Return: AX = 4952h if resident
  3127. SeeAlso: AX=0D20h,INT 12/AX=4350h/BX=4920h,INT 13/AH=F2h,INT 21/AX=010Fh
  3128. --------D-210C-------------------------------
  3129. INT 21 - DOS 1+ - FLUSH BUFFER AND READ STANDARD INPUT
  3130.     AH = 0Ch
  3131.     AL = STDIN input function to execute after flushing buffer
  3132.     other registers as appropriate for the input function
  3133. Return: as appropriate for the specified input function
  3134. Note:    if AL is not one of 01h,06h,07h,08h, or 0Ah, the buffer is flushed but
  3135.       no input is attempted
  3136. SeeAlso: AH=01h,AH=06h"INPUT",AH=07h,AH=08h,AH=0Ah
  3137. --------D-210D-------------------------------
  3138. INT 21 - DOS 1+ - DISK RESET
  3139.     AH = 0Dh
  3140. Return: (DOS 6 only) CF clear (earlier versions preserve CF)
  3141. Notes:    This function writes all modified disk buffers to disk, but does not
  3142.       update the directory information (that is only done when files are
  3143.       closed or a SYNC call is issued)
  3144. SeeAlso: AX=5D01h,INT 13/AH=00h,INT 2F/AX=1120h
  3145. --------v-210D20-----------------------------
  3146. INT 21 - VIRUS - "Crazy Imp" - INSTALLATION CHECK
  3147.     AX = 0D20h
  3148. Return: AX = 1971h if resident
  3149. SeeAlso: AX=0B56h,AX=1812h,AX=2C2Ch,AX=710Dh,AH=30h/DX=ABCDh
  3150. --------D-210E-------------------------------
  3151. INT 21 - DOS 1+ - SELECT DEFAULT DRIVE
  3152.     AH = 0Eh
  3153.     DL = new default drive (00h = A:, 01h = B:, etc)
  3154. Return: AL = number of potentially valid drive letters
  3155. Notes:    under Novell NetWare, the return value is always 32, the number of
  3156.       drives that NetWare supports
  3157.     under DOS 3.0+, the return value is the greatest of 5, the value of
  3158.       LASTDRIVE= in CONFIG.SYS, and the number of drives actually present
  3159.     on a DOS 1.x/2.x single-floppy system, AL returns 2 since the floppy
  3160.       may be accessed as either A: or B:
  3161.     otherwise, the return value is the highest drive actually present
  3162.     DOS 1.x supports a maximum of 16 drives, 2.x a maximum of 63 drives,
  3163.       and 3+ a maximum of 26 drives
  3164.     under Novell DOS 7, this function returns the correct LASTDRIVE value
  3165.       even when the undocumented LASTDRIVE=27..32 directive was used in
  3166.       CONFIG.SYS
  3167. SeeAlso: AH=19h,AH=3Bh,AH=DBh
  3168. --------v-210E--DLAD-------------------------
  3169. INT 21 U - Novell DOS 7 - SDRes v27.03 - INSTALLATION CHECK
  3170.     AH = 0Eh
  3171.     DL = ADh
  3172. Return: AL = BAh if installed
  3173. Program: SDRes is the resident portion of the Search&Destroy antiviral by
  3174.       Fifth Generation Systems, as bundled with Novell DOS 7
  3175. Note:    SDRes will terminate programs which test for the presence of viruses
  3176.       using interrupt-based installation calls, saying that the program
  3177.       may be infected
  3178. SeeAlso: AH=0Eh/DL=AEh,AH=0Eh/DL=AFh,AH=4Ah/BX=00B6h,INT 13/AX=A759h
  3179. --------v-210E--DLAE-------------------------
  3180. INT 21 U - Novell DOS 7 - SDRes v27.03 - CLEAR ??? FLAG
  3181.     AH = 0Eh
  3182.     DL = AEh
  3183. SeeAlso: AH=0Eh/DL=ADh,AH=0Eh/DL=AFh,INT 13/AX=A759h
  3184. --------v-210E--DLAF-------------------------
  3185. INT 21 U - Novell DOS 7 - SDRes v27.03 - SET ??? FLAG
  3186.     AH = 0Eh
  3187.     DL = AFh
  3188. SeeAlso: AH=0Eh/DL=ADh,AH=0Eh/DL=AEh,INT 13/AX=A759h
  3189. --------D-210F-------------------------------
  3190. INT 21 - DOS 1+ - OPEN FILE USING FCB
  3191.     AH = 0Fh
  3192.     DS:DX -> unopened File Control Block (see #1000,#1001)
  3193. Return: AL = status
  3194.         00h successful
  3195.         FFh file not found or access denied
  3196. Notes:    (DOS 3.1+) file opened for read/write in compatibility mode
  3197.     an unopened FCB has the drive, filename, and extension fields filled
  3198.       in and all other bytes cleared
  3199.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  3200.     DR DOS checks password attached with AX=4303h
  3201.     (FAT32 drive) this function will only succeed for creating a volume
  3202.       label; FAT32 does not support FCBs for file I/O
  3203. BUG:    APPEND for DOS 3.3+ corrupts DX if the file is not found
  3204. SeeAlso: AH=10h,AH=16h,AH=3Dh,AX=4303h
  3205.  
  3206. Format of File Control Block:
  3207. Offset    Size    Description    (Table 1000)
  3208.  00h    BYTE    drive number (0 = default, 1 = A, etc)
  3209.         FFh is not allowed (signals extended FCB, see #1001)
  3210.  01h  8 BYTEs    blank-padded file name
  3211.  09h  3 BYTEs    blank-padded file extension
  3212.  0Ch    WORD    current block number
  3213.  0Eh    WORD    logical record size
  3214.  10h    DWORD    file size
  3215.  14h    WORD    date of last write (see #1318 at AX=5700h)
  3216.  16h    WORD    time of last write (see #1317 at AX=5700h) (DOS 1.1+)
  3217.  18h  8 BYTEs    reserved (see #1002,#1003,#1004,#1005,#1006)
  3218.  20h    BYTE    record within current block
  3219.  21h    DWORD    random access record number (if record size is > 64 bytes, high
  3220.           byte is omitted)
  3221. SeeAlso: #1001
  3222.  
  3223. Format of Extended File Control Block (XFCB):
  3224. Offset    Size    Description    (Table 1001)
  3225.  00h    BYTE    FFh signature for extended FCB
  3226.  01h  5 BYTEs    reserved
  3227.  06h    BYTE    file attribute if extended FCB
  3228.  07h 36 BYTEs    standard FCB (all offsets are shifted by seven bytes)
  3229. SeeAlso: #0911
  3230.  
  3231. Format of FCB reserved field for DOS 1.0:
  3232. Offset    Size    Description    (Table 1002)
  3233.  16h    WORD    location in directory (if high byte = FFh, low byte is device
  3234.           ID)
  3235.  18h    WORD    number of first cluster in file
  3236.  1Ah    WORD    current absolute cluster number on disk
  3237.  1Ch    WORD    current relative cluster number within file
  3238.         (0 = first cluster of file, 1 = second cluster, etc.)
  3239.  1Eh    BYTE    dirty flag (00h = not dirty)
  3240.  1Fh    BYTE    unused
  3241.  
  3242. Format of FCB reserved field for DOS 1.10-1.25:
  3243. Offset    Size    Description    (Table 1003)
  3244.  18h    BYTE    bit 7: set if logical device
  3245.         bit 6: not dirty
  3246.         bits 5-0: disk number or logical device ID
  3247.  19h    WORD    starting cluster number on disk
  3248.  1Bh    WORD    current absolute cluster number on disk
  3249.  1Dh    WORD    current relative cluster number within file
  3250.  1Fh    BYTE    unused
  3251.  
  3252. Format of FCB reserved field for DOS 2.x:
  3253. Offset    Size    Description    (Table 1004)
  3254.  18h    BYTE    bit 7: set if logical device
  3255.         bit 6: set if open???
  3256.         bits 5-0: ???
  3257.  19h    WORD    starting cluster number on disk
  3258.  1Bh    WORD    ???
  3259.  1Dh    BYTE    ???
  3260.  1Eh    BYTE    ???
  3261.  1Fh    BYTE    ???
  3262.  
  3263. Format of FCB reserved field for DOS 3.x:
  3264. Offset    Size    Description    (Table 1005)
  3265.  18h    BYTE    number of system file table entry for file
  3266.  19h    BYTE    attributes
  3267.         bits 7,6: 00 = SHARE.EXE not loaded, disk file
  3268.               01 = SHARE.EXE not loaded, character device
  3269.               10 = SHARE.EXE loaded, remote file
  3270.               11 = SHARE.EXE loaded, local file or device
  3271.         bits 5-0: low six bits of device attribute word
  3272. ---SHARE.EXE loaded, local file---
  3273.  1Ah    WORD    starting cluster of file on disk
  3274.  1Ch    WORD    (DOS 3.x) offset within SHARE of sharing record
  3275.           (see #1289 at AH=52h)
  3276.  1Eh    BYTE    file attribute
  3277.  1Fh    BYTE    ???
  3278. ---SHARE.EXE loaded, remote file---
  3279.  1Ah    WORD    number of sector containing directory entry (see #1007)
  3280.  1Ch    WORD    relative cluster within file of last cluster accessed
  3281.  1Eh    BYTE    absolute cluster number of last cluster accessed
  3282.  1Fh    BYTE    ???
  3283. ---SHARE.EXE not loaded---
  3284.  1Ah    BYTE    (low byte of device attribute word AND 0Ch) OR open mode
  3285.  1Bh    WORD    starting cluster of file
  3286.  1Dh    WORD    number of sector containing directory entry (see #1007)
  3287.  1Fh    BYTE    number of directory entry within sector
  3288. Note:    if FCB opened on character device, DWORD at 1Ah is set to the address
  3289.       of the device driver header, then the BYTE at 1Ah is overwritten.
  3290. SeeAlso: #1298
  3291.  
  3292. Format of FCB reserved field for DOS 5.0:
  3293. Offset    Size    Description    (Table 1006)
  3294.  18h    BYTE    number of system file table entry for file
  3295.  19h    BYTE    attributes
  3296.         bits 7,6: 00 = SHARE.EXE not loaded, disk file
  3297.               01 = SHARE.EXE not loaded, character device
  3298.               10 = SHARE.EXE loaded, remote file
  3299.               11 = SHARE.EXE loaded, local file or device
  3300.         bits 5-0: low six bits of device attribute word
  3301. ---SHARE.EXE loaded, local file---
  3302.  1Ah    WORD    starting cluster of file on disk
  3303.  1Ch    WORD    unique sequence number of sharing record
  3304.  1Eh    BYTE    file attributes
  3305.  1Fh    BYTE    unused???
  3306. ---SHARE.EXE loaded, remote file---
  3307.  1Ah    WORD    network handle
  3308.  1Ch    DWORD    network ID
  3309. ---SHARE not loaded, local device---
  3310.  1Ah    DWORD    pointer to device driver header (see #1298)
  3311.  1Eh  2 BYTEs    unused???
  3312. ---SHARE not loaded, local file---
  3313.  1Ah    BYTE    extra info
  3314.         bit 7: read-only attribute from SFT
  3315.         bit 6: archive attribute from SFT
  3316.         bits 5-0: high bits of sector number
  3317.  1Bh    WORD    starting cluster of file
  3318.  1Dh    WORD    low word of sector number containing directory entry
  3319.         (see #1007)
  3320.  1Fh    BYTE    number of directory entry within sector
  3321. --------D-2110-------------------------------
  3322. INT 21 - DOS 1+ - CLOSE FILE USING FCB
  3323.     AH = 10h
  3324.     DS:DX -> File Control Block (see #1000)
  3325. Return: AL = status
  3326.         00h successful
  3327.         FFh failed
  3328. Notes:    a successful close forces all disk buffers used by the file to be
  3329.       written and the directory entry to be updated
  3330.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  3331. SeeAlso: AH=0Fh,AH=16h,AH=3Eh
  3332. --------D-2111-------------------------------
  3333. INT 21 - DOS 1+ - FIND FIRST MATCHING FILE USING FCB
  3334.     AH = 11h
  3335.     DS:DX -> unopened FCB (see #1000), may contain '?' wildcards
  3336. Return: AL = status
  3337.         00h successful
  3338.         [DTA] unopened FCB for first matching file
  3339.         FFh no matching filename, or bad FCB
  3340. Notes:    the type of the returned FCB depends on whether the input FCB was a
  3341.       normal or an extended FCB
  3342.     the data returned in the DTA (disk transfer area) is actually the
  3343.       drive number (or extended FCB header and drive number) followed by
  3344.       the file's directory entry (see #1007); this format happens to be
  3345.       compatible with an unopened FCB
  3346.     for extended FCBs with search attribute 08h, the volume label (if any)
  3347.       will be returned even if the current directory is not the root dir.
  3348.     DOS 3.0+ also allows the '*' wildcard
  3349.     the search FCB must not be modified if AH=12h will be used to continue
  3350.       searching; DOS 3.3 has set the following parts of the FCB:
  3351.          0Ch    BYTE    ???
  3352.          0Dh    WORD    directory entry number of matching file
  3353.          0Fh    WORD    cluster number of current directory
  3354.          11h  4 BYTEs    ???
  3355.          15h    BYTE    drive number (1=A:)
  3356.     this function is used by many copy protection schemes to obtain the
  3357.       starting cluster of a file
  3358. SeeAlso: AH=12h,AH=1Ah,AH=4Eh,INT 2F/AX=111Bh
  3359.  
  3360. Format of DOS directory entry:
  3361. Offset    Size    Description    (Table 1007)
  3362.  00h  8 BYTEs    blank-padded filename
  3363.  08h  3 BYTEs    blank-padded file extension
  3364.  0Bh    BYTE    attributes
  3365.  0Ch 10 BYTEs    (MS-DOS 1.0-6.22) reserved
  3366.         (DR-DOS) used to store file password
  3367.         (MS-DOS 7/Windows95) additional file times (see #1008)
  3368.  16h    WORD    time of creation or last update (see #1317 at AX=5700h)
  3369.  18h    WORD    date of creation or last update (see #1318 at AX=5700h)
  3370.  1Ah    WORD    starting cluster number (see also AX=440Dh/CX=0871h)
  3371.  1Ch    DWORD    file size
  3372. SeeAlso: #1009,#2276,#2277
  3373.  
  3374. Format of MS-DOS 7/Windows95 additional file times:
  3375. Offset    Size    Description    (Table 1008)
  3376.  00h    BYTE    reserved
  3377.  01h    BYTE    10-millisecond units past creation time below
  3378.  02h    WORD    file creation time
  3379.  04h    WORD    file creation date
  3380.  06h    WORD    last-access date
  3381.  08h    WORD    (FAT32) high word of starting cluster number
  3382. Note:    this data is stored beginning at offset 0Ch in a standard directory
  3383.       entry
  3384. SeeAlso: #1007
  3385.  
  3386. Format of MS-DOS 7/Windows95 long-filename directory entry:
  3387. Offset    Size    Description    (Table 1009)
  3388.  00h    BYTE    LFN record sequence (bit 6 set if last record for file)
  3389.  01h 10 BYTEs    long filename, first part
  3390.  0Bh    BYTE    0Fh (otherwise impossible file attribute, used as signature)
  3391.  0Ch    BYTE    reserved??? (00h)
  3392.  0Dh    BYTE    checksum for short filename
  3393.  10h 10 BYTEs    long filename, second part
  3394.  1Ah    WORD    first cluster number (always 0000h for LFN records)
  3395.  1Ch  4 BYTEs    long filename, third part
  3396. Notes:    long-filename entries are always stored in the directory just prior
  3397.       to the short-name entry for a file
  3398.     multiple LFN records are used if the long filename does not fit into
  3399.       a single record
  3400.     the short-filename checksum byte is computed by adding up the
  3401.       eleven bytes of the short filename, rotating the intermediate
  3402.       sum right one bit before adding the next character
  3403.     the long filename is encoded as 16-bit Unicode characters; for most
  3404.       filenames, this appears in the directory as the ASCII character
  3405.       followed by 00h
  3406. SeeAlso: #1007
  3407. --------D-2112-------------------------------
  3408. INT 21 - DOS 1+ - FIND NEXT MATCHING FILE USING FCB
  3409.     AH = 12h
  3410.     DS:DX -> unopened FCB (see #1000)
  3411. Return: AL = status
  3412.         00h successful
  3413.         Disk Transfer Area filled with unopened FCB
  3414.         FFh no more matching filenames
  3415. Note:    (see AH=11h)
  3416.     assumes that successful FindFirst executed on search FCB before call
  3417. SeeAlso: AH=1Ah,AH=4Fh,INT 2F/AX=111Ch
  3418. --------D-2113-------------------------------
  3419. INT 21 - DOS 1+ - DELETE FILE USING FCB
  3420.     AH = 13h
  3421.     DS:DX -> unopened FCB (see #1000), filename filled with template for
  3422.         deletion ('?' wildcards allowed)
  3423. Return: AL = status
  3424.         00h one or more files successfully deleted
  3425.         FFh no matching files or all were read-only or locked
  3426. Notes:    DOS 1.25+ deletes everything in the current directory (including
  3427.       subdirectories) and sets the first byte of the name to 00h (entry
  3428.       never used) instead of E5h if called on an extended FCB with
  3429.       filename '???????????' and bits 0-4 of the attribute set (bits 1 and
  3430.       2 for DOS 1.x).  This may have originally been an optimization to
  3431.       minimize directory searching after a mass deletion (DOS 1.25+ stop
  3432.       the directory search upon encountering a never-used entry), but can
  3433.       corrupt the filesystem under DOS 2+ because subdirectories are
  3434.       removed without deleting the files they contain.
  3435.     currently-open files should not be deleted
  3436.     MS-DOS allows deletion of read-only files with an extended FCB, whereas
  3437.       Novell NetWare, DR DOS 6, and Novell DOS 7/OpenDOS 7.01 do not
  3438.     this function reportedly generates an intentional trap under OS/2 v4.x
  3439.       (Warp4)
  3440. SeeAlso: AH=41h,INT 2F/AX=1113h
  3441. --------D-2114-------------------------------
  3442. INT 21 - DOS 1+ - SEQUENTIAL READ FROM FCB FILE
  3443.     AH = 14h
  3444.     DS:DX -> opened FCB (see #1000)
  3445. Return: AL = status
  3446.         00h successful
  3447.         01h end of file (no data)
  3448.         02h segment wrap in DTA
  3449.         03h end of file, partial record read
  3450.     Disk Tranfer Area filled with record read from file
  3451. Notes:    reads a record of the size specified in the FCB beginning at the
  3452.       current file position, then updates the current block and current
  3453.       record fields in the FCB
  3454.     if a partial record was read, it is zero-padded to the full size
  3455.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  3456. SeeAlso: AH=0Fh,AH=15h,AH=1Ah,AH=3Fh"DOS",INT 2F/AX=1108h
  3457. --------D-2115-------------------------------
  3458. INT 21 - DOS 1+ - SEQUENTIAL WRITE TO FCB FILE
  3459.     AH = 15h
  3460.     DS:DX -> opened FCB (see #1000)
  3461.     Disk Tranfer Area contains record to be written
  3462. Return: AL = status
  3463.         00h successful
  3464.         01h disk full
  3465.         02h segment wrap in DTA
  3466. Notes:    writes a record of the size specified in the FCB beginning at the
  3467.       current file position, then updates the current block and current
  3468.       record fields in the FCB
  3469.     if less than a full sector is written, the data is placed in a DOS
  3470.       buffer to be written out at a later time
  3471.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  3472. SeeAlso: AH=0Fh,AH=14h,AH=1Ah,AH=40h,INT 2F/AX=1109h
  3473. --------D-2116-------------------------------
  3474. INT 21 - DOS 1+ - CREATE OR TRUNCATE FILE USING FCB
  3475.     AH = 16h
  3476.     DS:DX -> unopened FCB (see #1000), wildcards not allowed
  3477. Return: AL = status
  3478.         00h successful
  3479.         FFh directory full or file exists and is read-only or locked
  3480. Notes:    if file already exists, it is truncated to zero length
  3481.     if an extended FCB is used, the file is given the attribute in the
  3482.       FCB; this is how to create a volume label in the disk's root dir
  3483.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  3484.     (FAT32 drive) this function will only succeed for creating a volume
  3485.       label; FAT32 does not support FCBs for file I/O
  3486. SeeAlso: AH=0Fh,AH=10h,AH=3Ch
  3487. --------D-2117-------------------------------
  3488. INT 21 - DOS 1+ - RENAME FILE USING FCB
  3489.     AH = 17h
  3490.     DS:DX -> modified FCB (see also #1000)
  3491.         the old filename ('?' wildcards OK) is in the standard location
  3492.         while the new filename ('?' wildcards OK, no drive) is stored
  3493.         in the 11 bytes beginning at offset 11h
  3494. Return: AL = status
  3495.         00h successfully renamed
  3496.         FFh no matching files,file is read-only, or new name already exists
  3497. Notes:    subdirectories may be renamed using an extended FCB with the
  3498.       appropriate attribute, as may volume labels
  3499.     DR DOS checks password attached with AX=4303h before permitting rename
  3500. SeeAlso: AH=0Fh,AH=13h,AX=4303h,AH=56h,INT 2F/AX=1111h
  3501. --------D-2118-------------------------------
  3502. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  3503.     AH = 18h
  3504. Return: AL = 00h
  3505. Note:    corresponds to the CP/M BDOS function "get bit map of logged drives",
  3506.       which is meaningless under MS-DOS
  3507. SeeAlso: AH=1Dh,AH=1Eh,AH=20h,AX=4459h,INT 60/DI=0513h
  3508. --------v-211812------------------------
  3509. INT 21 - VIRUS - "Tasha Yar" - INSTALLATION CHECK
  3510.     AX = 1812h
  3511. Return: AL = 00h if resident
  3512.     DX = 4310h if resident
  3513. SeeAlso: INT 21/AX=0B56h"VIRUS",INT 21/AX=187Fh,INT 21/AX=2C2Ch"VIRUS"
  3514. --------v-21187FBX4453-----------------------
  3515. INT 21 - VIRUS - "DS-3783" -INSTALLATION CHECK
  3516.     AX = 187Fh
  3517.     BX = 4453h
  3518. Return: BX = 87A1h if resident
  3519. SeeAlso: AX=1812h"VIRUS",AX=18FFh"VIRUS"
  3520. --------v-2118FF-----------------------------
  3521. INT 21 - VIRUS - "Pathogen:SMEG" - INSTALLATION CHECK
  3522.     AX = 18FFh
  3523. Return: AX = E701h if resident
  3524. SeeAlso: INT 21/AX=1812h"VIRUS",INT 21/AX=2080h"VIRUS"
  3525. --------D-2119-------------------------------
  3526. INT 21 - DOS 1+ - GET CURRENT DEFAULT DRIVE
  3527.     AH = 19h
  3528. Return: AL = drive (00h = A:, 01h = B:, etc)
  3529. Note:    Novell NetWare uses the fact that DOS 2.x COMMAND.COM issues this call
  3530.       from a particular location every time it starts a command to
  3531.       determine when to issue an automatic EOJ
  3532. SeeAlso: AH=0Eh,AH=47h,AH=BBh
  3533. --------D-211A-------------------------------
  3534. INT 21 - DOS 1+ - SET DISK TRANSFER AREA ADDRESS
  3535.     AH = 1Ah
  3536.     DS:DX -> Disk Transfer Area (DTA)
  3537. Notes:    the DTA is set to PSP:0080h when a program is started
  3538.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  3539. SeeAlso: AH=11h,AH=12h,AH=2Fh,AH=4Eh,AH=4Fh
  3540. --------D-211B-------------------------------
  3541. INT 21 - DOS 1+ - GET ALLOCATION INFORMATION FOR DEFAULT DRIVE
  3542.     AH = 1Bh
  3543. Return: AL = sectors per cluster (allocation unit)
  3544.     CX = bytes per sector
  3545.     DX = total number of clusters
  3546.     DS:BX -> media ID byte (see #1010)
  3547. Notes:    under DOS 1.x, DS:BX points at an actual copy of the FAT; later
  3548.       versions return a pointer to a copy of the FAT's ID byte
  3549.     this function may not be properly supported on CD-ROMs and other
  3550.       installable file systems (use AX=4402h"CD-ROM" for CD-ROMs
  3551.       instead)
  3552. SeeAlso: AH=1Ch,AH=36h
  3553.  
  3554. (Table 1010)
  3555. Values for media ID byte:
  3556.  FFh    floppy, double-sided, 8 sectors per track (320K)
  3557.  FEh    floppy, single-sided, 8 sectors per track (160K)
  3558.  FDh    floppy, double-sided, 9 sectors per track (360K)
  3559.  FCh    floppy, single-sided, 9 sectors per track (180K)
  3560.  FAh    HP 200LX D: ROM disk, 16 sectors per track (995K)
  3561.     HP 200LX E: (Stacker host drive ???)
  3562.  F9h    floppy, double-sided, 15 sectors per track (1.2M)
  3563.     floppy, double-sided, 9 sectors per track (720K,3.5")
  3564.  F8h    hard disk
  3565.  F0h    other media
  3566.     (e.g. floppy, double-sized, 18 sectors per track -- 1.44M,3.5")
  3567. --------D-211C-------------------------------
  3568. INT 21 - DOS 1+ - GET ALLOCATION INFORMATION FOR SPECIFIC DRIVE
  3569.     AH = 1Ch
  3570.     DL = drive (00h = default, 01h = A:, etc)
  3571. Return: AL = sectors per cluster (allocation unit), or FFh if invalid drive
  3572.     CX = bytes per sector
  3573.     DX = total number of clusters
  3574.     DS:BX -> media ID byte (see #1010)
  3575. Notes:    under DOS 1.x, DS:BX points at an actual copy of the FAT; later
  3576.       versions return a pointer to a copy of the FAT's ID byte
  3577.     on a DBLSPACE drive, the total number of clusters is based on the
  3578.       estimated compression ratio
  3579.     this function may not be properly supported on CD-ROMs and other
  3580.       installable file systems (use AX=4402h"CD-ROM" for CD-ROMs
  3581.       instead)
  3582. SeeAlso: AH=1Bh,AH=36h
  3583. --------D-211D-------------------------------
  3584. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  3585.     AH = 1Dh
  3586. Return: AL = 00h
  3587. Note:    corresponds to the CP/M BDOS function "get bit map of read-only
  3588.       drives", which is meaningless under MS-DOS
  3589. SeeAlso: AH=18h,AH=1Eh,AH=20h,AX=4459h
  3590. --------D-211E-------------------------------
  3591. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  3592.     AH = 1Eh
  3593. Return: AL = 00h
  3594. Note:    corresponds to the CP/M BDOS function "set file attributes" which was
  3595.      meaningless under MS-DOS 1.x
  3596. SeeAlso: AH=18h,AH=1Dh,AH=20h
  3597. --------D-211F-------------------------------
  3598. INT 21 - DOS 1+ - GET DRIVE PARAMETER BLOCK FOR DEFAULT DRIVE
  3599.     AH = 1Fh
  3600. Return: AL = status
  3601.         00h successful
  3602.         DS:BX -> Drive Parameter Block (DPB) (see #1011 for DOS 1.x,
  3603.             AH=32h for DOS 2+)
  3604.         FFh invalid drive
  3605. Note:    this call was undocumented prior to the release of DOS 5.0; however,
  3606.       only the DOS 4.0+ version of the DPB has been documented
  3607. SeeAlso: AH=32h,AX=7302h
  3608.  
  3609. Format of DOS 1.1 and MS-DOS 1.25 drive parameter block:
  3610. Offset    Size    Description    (Table 1011)
  3611.  00h    BYTE    sequential device ID
  3612.  01h    BYTE    logical drive number (0=A:)
  3613.  02h    WORD    bytes per sector
  3614.  04h    BYTE    highest sector number within a cluster
  3615.  05h    BYTE    shift count to convert clusters into sectors
  3616.  06h    WORD    starting sector number of first FAT
  3617.  08h    BYTE    number of copies of FAT
  3618.  09h    WORD    number of directory entries
  3619.  0Bh    WORD    number of first data sector
  3620.  0Dh    WORD    highest cluster number (number of data clusters + 1)
  3621.  0Fh    BYTE    sectors per FAT
  3622.  10h    WORD    starting sector of directory
  3623.  12h    WORD    address of allocation table
  3624. Note:    the DOS 1.0 table is the same except that the first and last fields
  3625.       are missing; see INT 21/AH=32h for the DOS 2+ version
  3626. --------D-2120-------------------------------
  3627. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  3628.     AH = 20h
  3629. Return: AL = 00h
  3630. Note:    corresponds to the CP/M BDOS function "get/set default user
  3631.       (sublibrary) number", which is meaningless under MS-DOS
  3632. SeeAlso: AH=18h,AH=1Dh,AH=1Eh,AX=4459h
  3633. --------v-212080-----------------------------
  3634. INT 21 - VIRUS - "New-Year" - INSTALLATION CHECK
  3635.     AX = 2080h
  3636. Return: AH = 00h if resident (normal DOS return would be AX = 2000h)
  3637. SeeAlso: INT 21/AX=18FFh"VIRUS",INT 21/AX=2C2Ch"VIRUS"
  3638. --------D-2121-------------------------------
  3639. INT 21 - DOS 1+ - READ RANDOM RECORD FROM FCB FILE
  3640.     AH = 21h
  3641.     DS:DX -> opened FCB (see #1000)
  3642. Return: AL = status
  3643.         00h successful
  3644.         01h end of file, no data read
  3645.         02h segment wrap in DTA, no data read
  3646.         03h end of file, partial record read
  3647.     Disk Tranfer Area filled with record read from file
  3648. Notes:    the record is read from the current file position as specified by the
  3649.       random record and record size fields of the FCB
  3650.     the file position is not updated after reading the record
  3651.     if a partial record is read, it is zero-padded to the full size
  3652.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  3653. SeeAlso: AH=14h,AH=22h,AH=27h,AH=3Fh"DOS"
  3654. --------D-2122-------------------------------
  3655. INT 21 - DOS 1+ - WRITE RANDOM RECORD TO FCB FILE
  3656.     AH = 22h
  3657.     DS:DX -> opened FCB (see #1000)
  3658.     Disk Transfer Area contains record to be written
  3659. Return: AL = status
  3660.         00h successful
  3661.         01h disk full
  3662.         02h segment wrap in DTA
  3663. Notes:    the record is written to the current file position as specified by the
  3664.       random record and record size fields of the FCB
  3665.     the file position is not updated after writing the record
  3666.     if the record is located beyond the end of the file, the file is
  3667.       extended but the intervening data remains uninitialized
  3668.     if the record only partially fills a disk sector, it is copied to a
  3669.       DOS disk buffer to be written out to disk at a later time
  3670.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  3671. SeeAlso: AH=15h,AH=21h,AH=28h,AH=40h
  3672. --------D-2123-------------------------------
  3673. INT 21 - DOS 1+ - GET FILE SIZE FOR FCB
  3674.     AH = 23h
  3675.     DS:DX -> unopened FCB (see #1000), wildcards not allowed
  3676. Return: AL = status
  3677.         00h successful (matching file found)
  3678.         FCB random record field filled with size in records, rounded up
  3679.         to next full record
  3680.         FFh failed (no matching file found)
  3681. Notes:    not supported by MS Windows 3.0 DOSX.EXE DOS extender
  3682.     MS-DOS returns nonsense if the FCB record number field is set to a very
  3683.       large positive number, and status FFh if negative; DR DOS returns the
  3684.       correct file size in both cases
  3685. BUG:    APPEND for DOS 3.3+ corrupts DX if the file is not found
  3686. SeeAlso: AH=42h
  3687. --------D-2124-------------------------------
  3688. INT 21 - DOS 1+ - SET RANDOM RECORD NUMBER FOR FCB
  3689.     AH = 24h
  3690.     DS:DX -> opened FCB (see #1000)
  3691. Notes:    computes the random record number corresponding to the current record
  3692.       number and record size, then stores the result in the FCB
  3693.     normally used when switching from sequential to random access
  3694.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  3695. SeeAlso: AH=21h,AH=27h,AH=42h
  3696. --------D-2125-------------------------------
  3697. INT 21 - DOS 1+ - SET INTERRUPT VECTOR
  3698.     AH = 25h
  3699.     AL = interrupt number
  3700.     DS:DX -> new interrupt handler
  3701. Notes:    this function is preferred over direct modification of the interrupt
  3702.       vector table
  3703.     some DOS extenders place an API on this function, as it is not
  3704.       directly meaningful in protected mode
  3705.     under DR DOS 5.0+, this function does not use any of the DOS-internal
  3706.       stacks and may thus be called at any time
  3707.     Novell NetWare (except the new DOS Requester) monitors the offset of
  3708.       any INT 24 set, and if equal to the value at startup, substitutes
  3709.       its own handler to allow handling of network errors; this introduces
  3710.       the potential bug that any program whose INT 24 handler offset
  3711.       happens to be the same as COMMAND.COM's will not have its INT 24
  3712.       handler installed
  3713. SeeAlso: AX=2501h,AH=35h
  3714. --------E-212501-----------------------------
  3715. INT 21 P - Phar Lap 386/DOS-Extender - RESET DOS EXTENDER DATA STRUCTURES
  3716.     AX = 2501h
  3717.     SS = application's original SS or DS (FlashTek X-32VM)
  3718. Return: CF clear if successful
  3719.     CF set on error
  3720.         caller is operating on X-32 stack (FlashTek X-32VM)
  3721. Notes:    Phar Lap uses INT 21/AH=25h as the entry point for all 386/DOS-Extender
  3722.       system calls.     Only available when directly using 386/DOS-Extender or
  3723.       a compatible DOS extender, or when using a product that was created
  3724.       using 386-DOS/Extender or a compatible
  3725.     this function is also supported by FlashTek X-32VM
  3726. SeeAlso: AH=30h"Phar Lap"
  3727. --------E-212502-----------------------------
  3728. INT 21 P - Phar Lap 386/DOS-Extender - GET PROTECTED-MODE INTERRUPT VECTOR
  3729.     AX = 2502h
  3730.     CL = interrupt number
  3731. Return: CF clear
  3732.     ES:EBX = CS:EIP of protected-mode interrupt handler
  3733. Note:    this function is also supported by FlashTek X-32VM
  3734. SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0204h
  3735. --------E-212503-----------------------------
  3736. INT 21 P - Phar Lap 386/DOS-Extender - GET REAL-MODE INTERRUPT VECTOR
  3737.     AX = 2503h
  3738.     CL = interrupt number
  3739. Return: CF clear
  3740.     EBX = CS:IP of real-mode interrupt handler
  3741. Note:    this function is also supported by FlashTek X-32VM
  3742. SeeAlso: AX=2502h,AX=2504h,AH=35h,INT 31/AX=0200h
  3743. --------E-212504-----------------------------
  3744. INT 21 P - Phar Lap 386/DOS-Extender - SET PROTECTED-MODE INTERRUPT VECTOR
  3745.     AX = 2504h
  3746.     CL = interrupt number
  3747.     DS:EDX = CS:EIP of protected-mode interrupt handler
  3748. Return: CF clear
  3749. Note:    this function is also supported by FlashTek X-32VM
  3750. SeeAlso: AX=2502h,AX=2505h,INT 31/AX=0205h
  3751. --------E-212505-----------------------------
  3752. INT 21 P - Phar Lap 386/DOS-Extender - SET REAL-MODE INTERRUPT VECTOR
  3753.     AX = 2505h
  3754.     CL = interrupt number
  3755.     EBX = CS:IP of real-mode interrupt handler
  3756. Return: CF clear
  3757. Note:    this function is also supported by FlashTek X-32VM
  3758. SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0201h
  3759. --------E-212506-----------------------------
  3760. INT 21 P - Phar Lap 386/DOS-Extender - SET INT TO ALWAYS GAIN CNTRL IN PR. MODE
  3761.     AX = 2506h
  3762.     CL = interrupt number
  3763.     DS:EDX = CS:EIP of protected-mode interrupt handler
  3764. Return: CF clear
  3765. Notes:    this function modifies both the real-mode low-memory interrupt
  3766.       vector table and the protected-mode Interrupt Descriptor Table (IDT)
  3767.     interrupts occurring in real mode are resignaled in protected mode
  3768.     this function is also supported by FlashTek X-32VM
  3769. --------E-212507-----------------------------
  3770. INT 21 P - Phar Lap 386/DOS-Extender - SET REAL- & PROTECTED-MODE INT VECTORS
  3771.     AX = 2507h
  3772.     CL = interrupt number
  3773.     DS:EDX = CS:EIP of protected-mode interrupt handler
  3774.     EBX = CS:IP of real-mode interrupt handler
  3775. Return: CF clear
  3776. Notes:    interrupts are disabled until both vectors have been modified
  3777.     this function is also supported by FlashTek X-32VM
  3778. SeeAlso: AX=2504h,AX=2505h
  3779. --------E-212508-----------------------------
  3780. INT 21 P - Phar Lap 386/DOS-Extender - GET SEGMENT LINEAR BASE ADDRESS
  3781.     AX = 2508h
  3782.     BX = segment selector
  3783. Return: CF clear if successful
  3784.         ECX = linear base address of segment
  3785.     CF set if invalid segment selector
  3786. Note:    this function is also supported by FlashTek X-32VM
  3787. SeeAlso: AX=2509h
  3788. --------E-212509-----------------------------
  3789. INT 21 P - Phar Lap 386/DOS-Extender - CONVERT LINEAR TO PHYSICAL ADDRESS
  3790.     AX = 2509h
  3791.     EBX = linear address to convert
  3792. Return: CF clear if successful
  3793.         ECX = physical address (carry flag clear)
  3794.     CF set if linear address not mapped in page tables
  3795. SeeAlso: AX=2508h
  3796. --------E-212509-----------------------------
  3797. INT 21 P - FlashTek X-32VM - GET SYSTEM SEGMENTS AND SELECTORS
  3798.     AX = 2509h
  3799. Return: CF clear
  3800.     EAX high word = default DS
  3801.     AX = alias for 16-bit data segment
  3802.     BX = real mode code segment
  3803.     EDX high word = selector covering full 4GB address space
  3804.     DX = default SS
  3805.     ESI high word = PSP selector
  3806.     SI = environment selector
  3807. --------E-21250A-----------------------------
  3808. INT 21 P - Phar Lap 386/DOS-Extender - MAP PHYSICAL MEMORY AT END OF SEGMENT
  3809.     AX = 250Ah
  3810.     ES = segment selector in the Local Descriptor Table (LDT) of segment
  3811.          to modify
  3812.     EBX = physical base address of memory to map (multiple of 4K)
  3813.     ECX = number of physical 4K pages to map
  3814. Return: CF clear if successful
  3815.         EAX = 32-bit offset in segment of mapped memory
  3816.     CF set on error
  3817.         EAX = error code
  3818.         08h insufficient memory to create page tables
  3819.         09h invalid segment selector
  3820. SeeAlso: INT 31/AX=0800h
  3821. --------E-21250C-----------------------------
  3822. INT 21 P - Phar Lap 386/DOS-Extender - GET HARDWARE INTERRUPT VECTORS
  3823.     AX = 250Ch
  3824. Return: CF clear
  3825.     AL = base interrupt vector for IRQ0-IRQ7
  3826.     AH = base interrupt vector for IRQ8-IRQ15
  3827.     BL = interrupt vector for BIOS print screen function (Phar Lap only)
  3828. Note:    this function is also supported by FlashTek X-32VM
  3829. SeeAlso: INT 31/AX=0400h,INT 67/AX=DE0Ah
  3830. --------E-21250D-----------------------------
  3831. INT 21 P - Phar Lap 386/DOS-Extender - GET REAL-MODE LINK INFORMATION
  3832.     AX = 250Dh
  3833. Return: CF clear
  3834.     EAX = CS:IP of real-mode callback procedure (see #1012) that will
  3835.           call through from real mode to a protected-mode routine
  3836.     EBX = 32-bit real-mode address of intermode call data buffer
  3837.     ECX = size in bytes of intermode call data buffer
  3838.     ES:EDX = protected-mode address of intermode call data buffer
  3839. Notes:    this function is also supported by FlashTek X-32VM
  3840.     X-32VM guarantees the intermode buffer to be at least 4 KB
  3841. SeeAlso: AX=250Eh
  3842.  
  3843. (Table 1012)
  3844. Call Phar Lap real-mode callback with:
  3845.     STACK:    DWORD    offset to protected-mode code
  3846.         WORD    placeholder for protected-mode CS
  3847.         DWORD    pointer to selector structure (see #1013)
  3848.             or 0000h:0000h for defaults
  3849.         var    parameters for protected-mode procedure
  3850. Return: via FAR return
  3851.  
  3852. Format of Phar Lap selector structure:
  3853. Offset    Size    Description    (Table 1013)
  3854.  00h    WORD    protected-mode GS selector
  3855.  02h    WORD    protected-mode FS selector
  3856.  04h    WORD    protected-mode ES selector
  3857.  06h    WORD    protected-mode DS selector
  3858. --------E-21250E-----------------------------
  3859. INT 21 P - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE
  3860.     AX = 250Eh
  3861.     EBX = CS:IP of real-mode procedure to call
  3862.     ECX = number of two-byte words to copy from protected-mode stack
  3863.           to real-mode stack
  3864. Return: CF clear if successful
  3865.         all segment registers unchanged
  3866.         all general registers contain values set by real-mode procedure
  3867.         all other flags set as they were left by real-mode procedure
  3868.         stack unchanged
  3869.     CF set on error
  3870.         EAX = error code
  3871.         01h not enough real-mode stack space
  3872. Note:    this function is also supported by FlashTek X-32VM; under X-32VM, the
  3873.       call will fail if ECX > 0000003Fh
  3874. SeeAlso: AX=250Dh,AX=2510h,AH=E1h"OS/286",INT 31/AX=0301h
  3875. --------E-21250F-----------------------------
  3876. INT 21 P - Phar Lap 386/DOS-Extender - CONVERT PROTECTED-MODE ADDRESS TO MS-DOS
  3877.     AX = 250Fh
  3878.     ES:EBX = 48-bit protected-mode address to convert
  3879.     ECX = 00000000h or length of data in bytes
  3880. Return: CF clear if successful (address < 1MB and contiguous)
  3881.         ECX = 32-bit real-mode MS-DOS address
  3882.     CF set on error (address >= 1MB or not contiguous)
  3883.         ECX = linear address
  3884. Note:    this function is also supported by FlashTek X-32VM
  3885. SeeAlso: AX=2510h
  3886. --------E-212510-----------------------------
  3887. INT 21 P - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE, REGISTERS
  3888.     AX = 2510h
  3889.     EBX = CS:IP of real-mode procedure to call
  3890.     ECX = number of two-byte words to copy to protected-mode stack to
  3891.           real-mode stack
  3892.     DS:EDX -> pointer to parameter block (see #1014)
  3893. Return: CF clear if successful
  3894.         all segment registers unchanged,
  3895.         EDX unchanged
  3896.         all other general registers contain values set by real-mode proc
  3897.         all other flags are set as they were left by real-mode procedure
  3898.         real-mode register values are returned in the parameter block
  3899.     CF set on error
  3900.         EAX = error code
  3901.         01h not enough real-mode stack space
  3902. Note:    unlike most of the preceding 25xxh functions, this one is not
  3903.       supported by FlashTek X-32VM
  3904. SeeAlso: AX=250Eh,AX=250Fh
  3905.  
  3906. Format of Phar Lap real-mode call parameter block:
  3907. Offset    Size    Description    (Table 1014)
  3908.  00h    WORD    real-mode DS value
  3909.  02h    WORD    real-mode ES value
  3910.  04h    WORD    real-mode FS value
  3911.  06h    WORD    real-mode GS value
  3912.  08h    DWORD    real-mode EAX value
  3913.  0Ch    DWORD    real-mode EBX value
  3914.  10h    DWORD    real-mode ECX value
  3915.  14h    DWORD    real-mode EDX value
  3916. --------E-212511-----------------------------
  3917. INT 21 P - Phar Lap 386/DOS-Extender - ISSUE REAL-MODE INTERRUPT
  3918.     AX = 2511h
  3919.     DS:EDX -> parameter block (see #1015)
  3920. Return: all segment registers unchanged
  3921.     EDX unchanged
  3922.     all other registers contain values set by the real-mode int handler
  3923.     the flags are set as they were left by the real-mode interrupt handler
  3924.     real-mode register values are returned in the parameter block
  3925. Note:    this function is also supported by FlashTek X-32VM
  3926. SeeAlso: AX=2503h,AX=2505h,AX=250Eh,AH=E3h"OS/286",INT 31/AX=0300h
  3927.  
  3928. Format of Phar Lap real-mode interrupt parameter block:
  3929. Offset    Size    Description    (Table 1015)
  3930.  00h    WORD    interrupt number
  3931.  02h    WORD    real-mode DS value
  3932.  04h    WORD    real-mode ES value
  3933.  06h    WORD    real-mode FS value
  3934.  08h    WORD    real-mode GS value
  3935.  0Ah    DWORD    real-mode EAX value
  3936.  0Eh    DWORD    real-mode EDX value
  3937. Note: all other real-mode values set from protected-mode registers
  3938. --------E-212512-----------------------------
  3939. INT 21 P - Phar Lap 386/DOS-Extender - LOAD PROGRAM FOR DEBUGGING
  3940.     AX = 2512h
  3941.     DS:EDX -> pointer to ASCIZ program name
  3942.     ES:EBX -> pointer to parameter block (see #1017)
  3943.     ECX = size in bytes of LDT buffer
  3944. Return: CF clear if successful
  3945.         EAX = number of segment descriptors in LDT
  3946.     CF set on error
  3947.         EAX = error code (see #1016)
  3948. SeeAlso: AX=2517h
  3949.  
  3950. (Table 1016)
  3951. Values for Phar Lap error code:
  3952.  02h    file not found or path invalid
  3953.  05h    access denied
  3954.  08h    insufficient memory
  3955.  0Ah    environment invalid
  3956.  0Bh    invalid file format
  3957.  80h    LDT too small
  3958.  
  3959. Format of Phar Lap program load parameter block:
  3960. Offset    Size    Description    (Table 1017)
  3961. Input:
  3962.  00h    DWORD    32-bit offset of environment string
  3963.  04h    WORD    segment of environment string
  3964.  06h    DWORD    32-bit offset of command-tail string
  3965.  0Ah    WORD    segment of command-tail string
  3966.  0Ch    DWORD    32-bit offset of LDT buffer (size in ECX)
  3967.  10h    WORD    segment of LDT buffer
  3968. Output:
  3969.  12h    WORD    real-mode paragraph address of PSP (see also AH=26h)
  3970.  14h    WORD    real/protected mode flag
  3971.         0000h  real mode
  3972.         0001h  protected mode
  3973.  16h    DWORD    initial EIP value
  3974.  1Ah    WORD    initial CS value
  3975.  1Ch    DWORD    initial ESP value
  3976.  20h    WORD    initial SS value
  3977.  22h    WORD    initial DS value
  3978.  24h    WORD    initial ES value
  3979.  26h    WORD    initial FS value
  3980.  28h    WORD    initial GS value
  3981. --------E-212513-----------------------------
  3982. INT 21 P - Phar Lap 386/DOS-Extender - ALIAS SEGMENT DESCRIPTOR
  3983.     AX = 2513h
  3984.     BX = segment selector of descriptor in GDT or LDT
  3985.     CL = access-rights byte for alias descriptor
  3986.     CH = use-type bit (USE16 or USE32) for alias descriptor
  3987. Return: CF clear if successful
  3988.         AX = segment selector for created alias
  3989.     CF set on error
  3990.         EAX = error code
  3991.         08h insufficient memory (can't grow LDT)
  3992.         09h invalid segment selector in BX
  3993. --------E-212514-----------------------------
  3994. INT 21 P - Phar Lap 386/DOS-Extender - CHANGE SEGMENT ATTRIBUTES
  3995.     AX = 2514h
  3996.     BX = segment selector of descriptor in GDT or LDT
  3997.     CL = new access-rights byte
  3998.     CH = new use-type bit (USE16 or USE32)
  3999. Return: CF clear if successful
  4000.     CF set on error
  4001.         EAX = error code
  4002.         09h invalid selector in BX
  4003. SeeAlso: AX=2515h,INT 31/AX=0009h
  4004. --------E-212515-----------------------------
  4005. INT 21 P - Phar Lap 386/DOS-Extender - GET SEGMENT ATTRIBUTES
  4006.     AX = 2515h
  4007.     BX = segment selector of descriptor in GDT or LDT
  4008. Return: CF clear if successful
  4009.         CL = access-rights byte for segment
  4010.         CH = use-type bit (USE16 or USE32)
  4011.     ECX<16-31> destroyed
  4012.     CF set on error
  4013.         EAX = error code
  4014.         09h invalid segment selector in BX
  4015. SeeAlso: AX=2514h
  4016. --------E-212516-----------------------------
  4017. INT 21 P - Phar Lap 386/DOS-Extender v2.2+ - FREE ALL MEMORY OWNED BY LDT
  4018.     AX = 2516h
  4019. Return: CF clear
  4020. Note:    this function must be called from Ring 0 or the CS descriptor is freed
  4021. --------E-212517-----------------------------
  4022. INT 21 P - Phar Lap 386/DOS-Extender v2.1c+ - GET INFO ON DOS DATA BUFFER
  4023.     AX = 2517h
  4024. Return: CF clear
  4025.     ES:EBX -> data buffer (protected mode address)
  4026.     ECX -> data buffer (real mode address)
  4027.     EDX = size of data buffer in bytes
  4028. Note:    the data buffer's address changes after calls to AX=2512h and AX=252Ah
  4029. SeeAlso: AX=2512h,AX=252Ah,AX=2530h
  4030. --------E-212518-----------------------------
  4031. INT 21 P - Phar Lap 386/DOS-Extender 2.1c+ - SPECIFY HANDLER FOR MOVED SEGMENTS
  4032.     AX = 2518h
  4033.     ES:EBX -> function to call when a segment is moved
  4034. Return: CF clear
  4035.     ES:EBX -> previous handler
  4036. --------E-212519-----------------------------
  4037. INT 21 P - Phar Lap 386/DOS-Extender VMM - GET ADDITIONAL MEMORY ERROR INFO
  4038.     AX = 2519h
  4039. Return: CF clear
  4040.     EAX = error code
  4041.         0000h  no error
  4042.         0001h  out of physical memory
  4043.         0002h  out of swap space (unable to grow swap file)
  4044.         0003h  out of LDT entries and unable to grow LDT
  4045.         0004h  unable to change extended memory allocation mark
  4046.         FFFFFFFFh    paging disabled
  4047. Note:    VMM is the Virtual Memory Manager option
  4048. --------E-21251A-----------------------------
  4049. INT 21 P - Phar Lap 386/DOS-Extender VMM - LOCK PAGES IN MEMORY
  4050.     AX = 251Ah
  4051.     EDX = number of 4k pages to lock
  4052.     if BL = 00h
  4053.         ECX = linear address of first page to lock
  4054.     if BL = 01h
  4055.         ES:ECX -> pointer to first page to lock
  4056. Return: CF clear if successful
  4057.     CF set on error
  4058.         EAX = error code
  4059.         08h insufficient memory
  4060.         09h invalid address range
  4061. SeeAlso: AX=251Bh,AX=EB06h,INT 31/AX=0600h
  4062. --------E-21251B-----------------------------
  4063. INT 21 P - Phar Lap 386/DOS-Extender VMM - UNLOCK PAGES
  4064.     AX = 251Bh
  4065.     EDX = number of pages to unlock
  4066.     if BL = 00h
  4067.         ECX = linear address of first page to unlock
  4068.     if BL = 01h
  4069.         ES:ECX -> pointer to first page to unlock
  4070. Return: CF clear if successful
  4071.     CF set on error
  4072.         EAX = error code
  4073.         09h invalid address range
  4074. SeeAlso: AX=251Ah,AX=EB07h,INT 31/AX=0601h
  4075. --------E-21251C-----------------------------
  4076. INT 21 P - Phar Lap 386/DOS-Extender VMM v2.1c+ - FREE PHYSICAL MEMORY PAGES
  4077.     AX = 251Ch
  4078.     BH = preservation flag (00h preserve contents, 01h discard contents)
  4079.     EDX = number of pages to free
  4080.     BL = address type
  4081.         00h linear address
  4082.         ECX = linear address of first page to be freed
  4083.         01h pointer
  4084.         ES:ECX -> first page to be freed
  4085. Return: CF clear if successful
  4086.     CF set on error
  4087.         EAX = error code
  4088.         08h memory error, swap space full, no VMM or DPMI
  4089.         09h invalid address
  4090. --------E-21251D-----------------------------
  4091. INT 21 OP - Phar Lap 386/DOS-Extender VMM v2.1c - READ PAGE-TABLE ENTRY
  4092.     AX = 251Dh
  4093.     BL = address type
  4094.         00h linear address
  4095.         ECX = linear address of page table entry to read
  4096.         01h pointer
  4097.         ES:ECX -> page table entry to read
  4098. Return: CF clear if successful
  4099.         EAX = contents of page table entry
  4100.     CF set on error
  4101.         EAX = error code
  4102.         09h invalid address or NOPAGE option set
  4103.         78h invalid under DPMI
  4104. Note:    this function is obsolete; use AX=252Bh/BH=09h instead
  4105. SeeAlso: AX=251Eh,AX=252Bh/BH=09h,AX=EB00h,INT 31/AX=0506h
  4106. --------E-21251E-----------------------------
  4107. INT 21 OP - Phar Lap 386/DOS-Extender VMM v2.1c - WRITE PAGE-TABLE ENTRY
  4108.     AX = 251Eh
  4109.     BL = address type
  4110.         00h linear address
  4111.         ECX = linear address of page table entry to read
  4112.         01h pointer
  4113.         ES:ECX -> page table entry to read
  4114.     EDX = new value for page table entry
  4115. Return: CF clear if successful
  4116.     CF set on error
  4117.         EAX = error code
  4118.         09h invalid address or NOPAGE option set
  4119.         82h not compatible with DPMI
  4120. Note:    this call is obsolete; use AX=252Bh/BH=0Ah instead
  4121. SeeAlso: AX=251Dh,AX=252Bh/BH=0Ah,INT 31/AX=0507h
  4122. --------E-21251F-----------------------------
  4123. INT 21 P - Phar Lap 386/DOS-Extender VMM - EXHANGE TWO PAGE-TABLE ENTRIES
  4124.     AX = 251Fh
  4125.     BL = address type
  4126.         00h linear address
  4127.         ECX = linear address of first page table entry
  4128.         EDX = linear address of second page table entry
  4129.         01h pointer
  4130.         ES:ECX -> first page table entry
  4131.         ES:EDX -> second page table entry
  4132. Return: CF clear if successful
  4133.     CF set on error
  4134.         EAX = error code
  4135.         09h invalid address or NOPAGE option set
  4136.         82h not compatible with DPMI
  4137. SeeAlso: AX=251Dh,AX=251Eh
  4138. --------E-212520-----------------------------
  4139. INT 21 P - Phar Lap 386/DOS-Extender VMM - GET MEMORY STATISTICS
  4140.     AX = 2520h
  4141.     DS:EDX -> pointer to buffer at least 100 bytes in size (see #1018)
  4142.     BL = 0 (don't reset VM stats), 1 (reset VM stats)
  4143. Return: carry flag clear
  4144.  
  4145. Format of Phar Lap VM statistics buffer:
  4146. Offset    Size    Description    (Table 1018)
  4147.  00h    DWORD    VM status
  4148.         0001h VM subsystem is present
  4149.         0000h VM not present
  4150.  04h    DWORD    "nconvpg" number of conventional memory pages available
  4151.  08h    DWORD    "nbimpg" number of Compaq built-in memory pages available
  4152.  0Ch    DWORD    "nextpg" total number of extended memory pages
  4153.  10h    DWORD    "extlim" extender memory pages limit
  4154.  14h    DWORD    "aphyspg" number of physical memory pages allocated to appl
  4155.  18h    DWORD    "alockpg" number of locked pages owned by application
  4156.  1Ch    DWORD    "sysphyspg" number physical memory pages allocated to system
  4157.  20h    DWORD    "nfreepg" number of free physical pages; approx if EMS VCPI
  4158.  24h    DWORD    linear address of beginning of application address space
  4159.  28h    DWORD    linear address of end of application address space
  4160.  2Ch    DWORD    number of seconds since last time VM stats were reset
  4161.  30h    DWORD    number of page faults since last time
  4162.  34h    DWORD    number of pages written to swap file since last time
  4163.  38h    DWORD    number of reclaimed pages (page faults on swapped pages)
  4164.  3Ch    DWORD    number of virtual pages allocated to the application
  4165.  40h    DWORD    size in pages of swap file
  4166.  44h    DWORD    number of system pages allocated with EMS calls
  4167.  48h    DWORD    minimum number of conventional memory pages
  4168.  4Ch    DWORD    maximum size in pages to which swap file can be increased
  4169.  50h    DWORD    "vmflags"
  4170.         bit 0 = 1 if page fault in progress
  4171. ---v4.0+ ---
  4172.  54h    DWORD    number of physical pages guaranteed to be free
  4173.  58h    DWORD    number of free physical pages currently available
  4174.  5Ch    DWORD    size in pages of largest free block of memory (including disk
  4175.           swap space)
  4176.  60h    DWORD    reserved
  4177. --------E-212521-----------------------------
  4178. INT 21 P - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S EXTENDED MEM USAGE
  4179.     AX = 2521h
  4180.     EBX = max 4k pages of physical extended memory which program may use
  4181. Return: CF clear if successful
  4182.        EBX = maximum limit in pages
  4183.        ECX = minimum limit in pages
  4184.     CF set on error
  4185.         EAX = error code
  4186.         08h insufficient memory or -nopage switch used
  4187. SeeAlso: AX=2522h
  4188. --------E-212522-----------------------------
  4189. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - SPECIFY ALTERNATE PAGE-FAULT HANDLR
  4190.     AX = 2522h
  4191.     ES:EBX -> alternate handler for page faults
  4192. Return: CF clear
  4193.     ES:EBX -> previous page-fault handler
  4194. SeeAlso: AX=2523h
  4195. --------E-212523-----------------------------
  4196. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - SPECIFY OUT-OF-SWAP-SPACE HANDLER
  4197.     AX = 2523h
  4198.     ???
  4199. Return: ???
  4200. Note:    this function takes a DWORD pointer and a DWORD pointer to a DWORD
  4201.       pointer as arguments
  4202. SeeAlso: AX=2522h
  4203. --------E-212524-----------------------------
  4204. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - INSTALL PAGE-REPLACEMENT HANDLERS
  4205.     AX = 2524h
  4206.     ???
  4207. Return: ???
  4208. Note:    this function takes three DWORD pointers and three DWORD pointers to
  4209.       DWORD pointers as arguments
  4210. --------E-212525-----------------------------
  4211. INT 21 P - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S CONVENT'L MEM USAGE
  4212.     AX = 2525h
  4213.     EBX = limit in 4k pages of physical conventional memory which program
  4214.           may use
  4215. Return: CF clear if successful
  4216.         EBX = maximum limit in pages
  4217.         ECX = minimum limit in pages
  4218.     CF set on error
  4219.         EAX = error code
  4220.         08h insufficient memory or -nopage switch used
  4221. SeeAlso: AX=2521h
  4222. --------E-212526-----------------------------
  4223. INT 21 P - Phar Lap 386/DOS-Extender - GET CONFIGURATION INFORMATION
  4224.     AX = 2526h
  4225.     ???
  4226. Return: ???
  4227. Notes:    details are not yet available
  4228.     this function takes a pointer to the configuration buffer (see #1019)
  4229.       and a poitner to a BYTE as arguments
  4230.  
  4231. Format of Phar Lap configuration buffer:
  4232. Offset    Size    Description    (Table 1019)
  4233.  00h    DWORD    flags 1 (see #1020)
  4234.  04h    DWORD    flags 2 (unused through v5.0)
  4235.  08h    DWORD    flags 3 (unused through v5.0)
  4236.  0Ch    DWORD    386|DOS-Extender major version
  4237.  10h    DWORD    386|DOS-Extender minor version
  4238.  14h    DWORD    first letter of text after minor version number in version str
  4239.  18h    DWORD    beta flag (00h normal release, 01h beta release)
  4240.  1Ch    DWORD    processor (3 = 386, 4 = 486)
  4241.  20h    DWORD    coprocessor (4 = none, 6 = 287, 7 = 387/486)
  4242.  24h    DWORD    Weitek coprocessor flag (0 = none, 1 = present)
  4243.  28h    DWORD    machine type (0 = IBM PC compatible, 1 = NEC 9800 series)
  4244.  2Ch    DWORD    machine class
  4245.         IBM: bus type (0=ISA, 1=MCA, 2=XT, 3=EISA)
  4246.         NEC: 0=normal mode, 1=high-res mode
  4247.  30h    DWORD    VCPI flag (0 = none, 1 = present)
  4248.  34h    DWORD    -WEITEK/-1167 switch (0 = AUTO, 1 = ON, 2 = OFF)
  4249.  38h    DWORD    -MINREAL setting
  4250.  3Ch    DWORD    -MAXREAL setting
  4251.  40h    DWORD    -MINIBUF setting
  4252.  44h    DWORD    -MAXIBUF setting
  4253.  48h    DWORD    size in bytes of DOS call data buffer
  4254.  4Ch    DWORD    number of interrupt stacks (-NISTACK)
  4255.  50h    DWORD    interrupt stack size (-ISTKSIZE)
  4256.  54h    DWORD    -REALBREAK setting
  4257.  58h    DWORD    -CALLBUFS
  4258.  5Ch    DWORD    -HWIVEC
  4259.  60h    DWORD    -PRIVEC
  4260.  64h    DWORD    -INTMAP
  4261.  68h    DWORD    -PRIMAP
  4262.  6Ch    DWORD    VCPI: master 8259 interrupt vector base (IRQ0 mapping)
  4263.  70h    DWORD    VCPI: slave 8259 interrupt vector base (IRQ8 mapping)
  4264.  74h    DWORD    BIOS print screen interrupt vector (0 if NEC)
  4265.  78h    DWORD    -EXTLOW setting
  4266.  7Ch    DWORD    -EXTHIGH setting
  4267.  80h    DWORD    lowest physical extended-memory address allocatable
  4268.  84h    DWORD    highest physical extended-memory address allocatable + 1
  4269.  88h    DWORD    special memory's physical base address (00000000h if none)
  4270.  8Ch    DWORD    special memory size in bytes (00000000h if none)
  4271.  90h    DWORD    -MAXVCPIMEM setting
  4272.  94h    DWORD    -VSCAN
  4273.  98h    DWORD    -SWAPCHK (0 = OFF, 1 = ON, 2 = FORCE, 3 = MAX)
  4274.  9Ch    DWORD    -CODESIZE setting
  4275.  A0h    DWORD    minimum swap file size (-MINSWFSIZE)
  4276.  A4h    DWORD    maximum swap fiel size (-MAXSWFSIZE)
  4277.  A8h    DWORD    page replacement policy (0 = LFU, 1 = NUR)
  4278.  ACh    DWORD    number of GDT entries (-NGDTENT)
  4279.  B0h    DWORD    number of LDT entries (-NLDTENT)
  4280.  B4h    DWORD    program's privilege level (0-3)
  4281. ---386|DOS-Extender v3.0+ ---
  4282.  B8h    DWORD    -LOCKSTACK setting
  4283.  BCh    DWORD    -MAXEXTMEM
  4284.  C0h    DWORD    -MAXXMSMEM
  4285.  C4h    DWORD    -MAXPGMMEM
  4286.  C8h    DWORD    -DATATHRESHOLD
  4287.  CCh    DWORD    virtual memory manager flag (0 = not present, 1 = present)
  4288.  D0h    DWORD    Cyrix coprocessor flag (0 = no Cyrix EMC387, 1 = present)
  4289.  D4h    DWORD    -CYRIX setting (0 = AUTO, 1 = ON, 2 = OFF)
  4290.  D8h    DWORD    DPMI flag (0 = not present, 1 = present)
  4291.  DCh    DWORD    DPMI major version
  4292.  E0h    DWORD    DPMI minor version
  4293.  E4h    DWORD    DPMI capabilities flags (see #1021)
  4294.  E8h    DWORD    VCPI major version
  4295.  ECh    DWORD    VCPI minor version
  4296.  F0h    WORD    VCPI: IRQ0-7 physical base interrupt vector
  4297.  F2h    WORD    VCPI: IRQ8-15 physical base interrupt vector
  4298.  F4h    DWORD    XMS flag (0 = none, 1 = present)
  4299.  F8h    DWORD    XMS major version
  4300.  FCh    DWORD    XMS minor version
  4301. 100h    WORD    application's CS selector
  4302. 102h    WORD    application's DS selector
  4303. 104h    WORD    application's PSP selector
  4304. 106h    WORD    application's environment selector
  4305. 108h    WORD    selector mapping entire first megabyte
  4306. 10Ah    WORD    selector mapping text video memory
  4307. 10Ch    WORD    selector mapping video memory (text for IBM, graphics for NEC)
  4308. 10Eh    WORD    selector mapping Weitek address space, 0000h if not present
  4309. 110h    WORD    selector mapping Cyrix EMC387 address space, 0000h if none
  4310. 112h    WORD    reserved (0)
  4311. 114h    DWORD    real-mode FAR entry point to call to switch to protected mode
  4312.           with no saved context
  4313. 118h    DWORD    size of LDT in bytes
  4314. ---386|DOS-Extender v5.0+ ---
  4315. 11Ch    DWORD    Windows flag (0 = not present, 1 = Windows present)
  4316. 120h    DWORD    Windows major version
  4317. 124h    DWORD    Windows minor version
  4318. 128h    DWORD    Windows mode (0 = real/standard, 1 = enhanced)
  4319. 12Ch    DWORD    OS/2 flag (0 = not present, 1 = OS/2 present)
  4320. 130h    DWORD    OS/2 major version
  4321. 134h    DWORD    OS/2 minor version
  4322. 138h 50 DWORDs    reserved (0)
  4323.  
  4324. Bitfields for flags 1:
  4325. Bit(s)    Description    (Table 1020)
  4326.  0    -NOPAGE specified
  4327.  1    -A20 specified
  4328.  2    -VDISK specified
  4329.  3    -XT specified
  4330.  4    -AT specified
  4331.  5    -MCA specified
  4332.  6    -EISA specified
  4333.  7    -NORMRES specified (NEC only)
  4334.  8    -HIGHRES specified (NEC only)
  4335.  9    set if -SWFGROW1ST, clear if -NOSWFGROW1ST
  4336.  10    -NOVM specified
  4337.  11    -SAVEREGS specified
  4338.  12    unused (clear)
  4339.  13    -NOVCPI specified
  4340.  14    -NOMUL specified
  4341.  15    -NOBMCHK specified
  4342.  16    -NOSPCLMEM or -NOBIM
  4343.  17    -NOPGEXP specified
  4344.  18    -SWAPDEFDISK specified
  4345. ---v3.0+ ---
  4346.  19    -SAVEINTS specified
  4347.  20    -NOLOAD specified
  4348.  21    -PAGELOG specified
  4349.  22    -OPENDENY specified
  4350.  23    -ERRATA17 specified
  4351. ---v4.1+ ---
  4352.  24    -NESTDPMI specified
  4353.  25    -NONESTDPMI specified
  4354.  26    -NODPMI specified
  4355.  27    -NOPCDWEITEK specified
  4356. ---v4.2+ ---
  4357.  28    -WININT21 specified
  4358.  
  4359. Bitfields for DPMI capabilities flags:
  4360. Bit(s)    Description    (Table 1021)
  4361.  0    paging supported
  4362.  1    physical device mapping
  4363.  2    conventional memory mapping
  4364.  3    exceptions restartable
  4365. --------E-212527-----------------------------
  4366. INT 21 P - Phar Lap 386/DOS-Extender VMM - EN/DISABLE STATE SAVE ON INTERRUPTS
  4367.     AX = 2527h
  4368.     EBX = new status (00h disabled, 01h enabled)
  4369. Return: CF clear
  4370.     EBX = previous state save flag
  4371. SeeAlso: AX=2528h
  4372. --------E-212528-----------------------------
  4373. INT 21 P - Phar Lap 386/DOS-Extender VMM - READ REGISTERS AFTER CTRL-C INT
  4374.     AX = 2528h
  4375.     DS:EBX -> buffer for registers (see #1022)
  4376. Return: CF clear if successful
  4377.         DS:EBX buffer filled
  4378.     CF set on error
  4379.         EAX = error code
  4380.         83h interrupt state save not enabled
  4381.         84h no active interrupt
  4382. SeeAlso: AX=2527h
  4383.  
  4384. Format of Phar Lap buffer for registers:
  4385. Offset    Size    Description    (Table 1022)
  4386.  00h  8 BYTEs    unused
  4387.  08h  4    DWORDs    EAX,EBX,ECX,EDX
  4388.  18h  4 DWORDs    ESI,EDI,EBP,ESP
  4389.  28h  6 WORDs    CS,DS,SS,ES,FS,GS
  4390.  34h    DWORD    EIP
  4391.  38h    DWORD    EFLAGS
  4392. --------E-212529-----------------------------
  4393. INT 21 P - Phar Lap 386/DOS-Extender - LOAD FLAT MODEL .EXP or .REX FILE
  4394.     AX = 2529h
  4395.     ???
  4396. Return: ES:EBX -> parameter block (see #1023)
  4397.     ???
  4398. Note:    details not available at this time
  4399. SeeAlso: AX=252Ah
  4400.  
  4401. Format of Phar Lap program load parameter block:
  4402. Offset    Size    Description    (Table 1023)
  4403.  00h    DWORD    initial EIP
  4404.  04h    WORD    initial CS
  4405.  06h    DWORD    initial ESP
  4406.  0Ah    WORD    initial SS
  4407.  0Ch  4 WORDs    initial DS, ES, FS, GS
  4408.  14h    DWORD    minimum size in bytes of program segment
  4409.  18h    DWORD    bytes of additional memory allocated
  4410.  1Ch    DWORD    flags
  4411.         bit 0: child linked with -UNPRIVILEGED
  4412.         ---v6.0+ ---
  4413.         bit 1: child is PE file instead of .EXP
  4414.         bit 2: loaded file is a DLL
  4415.         bits 3-31 reserved
  4416. ---v6.0+ ---
  4417.  20h    DWORD    module handles (PE files only)
  4418.  24h  7 DWORDs    reserved (0)
  4419. --------E-21252A-----------------------------
  4420. INT 21 P - Phar Lap 386/DOS-Extender VMM - NEW LOAD PROGRAM FOR DEBUG
  4421.     AX = 252Ah
  4422.     DS:EDX -> ASCIZ program name
  4423.     ES:EBX -> parameter block (see #1017)
  4424.     ECX = size of LDT buffer in bytes
  4425.     ESI = bit flags
  4426.         bit 0: allow demand paging rather than loading entire program
  4427.         bit 1: demand page from swap file rather than from .EXP
  4428. Return: CF clear if successful
  4429.         EAX = VMM handle or FFFFFFFFh if none
  4430.         ECX = number of descriptors in LDT buffer
  4431.     CF set on error
  4432.         EAX = error code
  4433.         02h file error
  4434.             EBX = file error code (see #1024)
  4435.             ECX = DOS error code if EBX=1,2,3, or 8
  4436.         08h insufficient memory
  4437.             EBX = memory error code (see #1025)
  4438.         80h LDT buffer too small
  4439.         87h called twice without intervening call to AX=2531h
  4440. SeeAlso: AX=2512h,AX=2517h,AX=2529h,AX=2531h
  4441.  
  4442. (Table 1024)
  4443. Values for Phar Lap file error code:
  4444.  01h    DOS open error
  4445.  02h    DOS seek error
  4446.  03h    DOS read error
  4447.  04h    not an .EXP or .REX file
  4448.  05h    invalid file format
  4449.  06h    -OFFSET is not a multiple of 64K
  4450.  07h    -NOPAGE incompatible with -REALBREAK/-OFFSET
  4451.  08h    DOS error loading .EXE file
  4452.  
  4453. (Table 1025)
  4454. Values for Phar Lap memory error code:
  4455.  01h    out of physical memory
  4456.  02h    out of swap space
  4457.  04h    unable to change extended memory allocation
  4458.  05h    -MAXPGMMEM exceeded
  4459.  06h    insufficient low memory to REALBREAK value
  4460.  07h    insufficient low memory for PSP and environment
  4461. --------E-21252BBH00-------------------------
  4462. INT 21 Pu - Phar Lap 386/DOS-Extender - CREATE UNMAPPED PAGES
  4463.     AX = 252Bh
  4464.     BH = 00h
  4465.     ???
  4466. Return: ???
  4467. --------E-21252BBH01-------------------------
  4468. INT 21 Pu - Phar Lap 386/DOS-Extender - CREATE ALLOCATED PAGES
  4469.     AX = 252Bh
  4470.     BH = 01h
  4471.     ???
  4472. Return: ???
  4473. --------E-21252BBH02-------------------------
  4474. INT 21 Pu - Phar Lap 386/DOS-Extender - CREATE PHYSICAL DEVICE PAGES
  4475.     AX = 252Bh
  4476.     BH = 02h
  4477.     ???
  4478. Return: ???
  4479. --------E-21252BBH03-------------------------
  4480. INT 21 Pu - Phar Lap 386/DOS-Extender - MAP DATA FILE
  4481.     AX = 252Bh
  4482.     BH = 03h
  4483.     ???
  4484. Return: ???
  4485. SeeAlso: AX=252Bh/BH=0Bh
  4486. --------E-21252BBH04-------------------------
  4487. INT 21 Pu - Phar Lap 386/DOS-Extender - GET PAGE TYPES
  4488.     AX = 252Bh
  4489.     BH = 04h
  4490.     ???
  4491. Return: ???
  4492. Note:    returns one word per page
  4493. SeeAlso: #1026
  4494.  
  4495. Bitfields for Phar Lap page information:
  4496. Bit(s)    Description    (Table 1026)
  4497.  7    mapped to read/write data file
  4498.  6    mapped to read-only data file
  4499.  5    swapped to disk
  4500.  4    locked
  4501.  3-0    page type
  4502.     0 unmapped
  4503.     1 allocated
  4504.     2 physical device page
  4505. --------E-21252B-----------------------------
  4506. INT 21 P - Phar Lap 386/DOS-Extender - VIRTUAL MEMORY MANAGEMENT - PAGE LOCKING
  4507.     AX = 252Bh
  4508.     BH = function
  4509.         05h lock pages
  4510.         06h unlock pages
  4511.     BL = address type
  4512.         00h linear address
  4513.         ECX = linear start address of memory region
  4514.         01h segmented address
  4515.         ES:ECX -> start of memory region
  4516.     EDX = size of memory region in bytes
  4517. Return: CF clear if successful
  4518.     CF set on error
  4519. Note:    this function is also supported by FlashTek X-32VM; if X-32 is not
  4520.       using virtual memory, this function always succeeds
  4521. --------E-21252B-----------------------------
  4522. INT 21 Pu - Phar Lap 386/DOS-Extender - FREE PHYSICAL PAGES
  4523.     AX = 252Bh
  4524.     BH = function (07h,08h)
  4525.     ???
  4526. Return: ???
  4527. --------E-21252BBH09-------------------------
  4528. INT 21 P - Phar Lap 386/DOS-Extender v4.1 - GET PAGETABLE ENTRY/PAGE TABLE INFO
  4529.     AX = 252Bh
  4530.     BH = 09h
  4531.     BL = subfunction
  4532.         00h get page table entry by linear address
  4533.         ECX = linear address for which to get page table entry
  4534.         01h get page table entry by logical address
  4535.         ES:ECX = address for which to get page table entry
  4536. Return: CF clear if successful
  4537.         EAX = page table entry
  4538.         EBX = additional page table information
  4539.     CF set on error
  4540.         EAX = error code
  4541.         0009h invalid address
  4542.         0082h running under DPMI
  4543. SeeAlso: AX=251Dh,AX=252Bh/BH=0Ah
  4544. --------E-21252BBH0A-------------------------
  4545. INT 21 P - Phar Lap 386/DOS-Extender v4.1 - SET PAGETABLE ENTRY/PAGE TABLE INFO
  4546.     AX = 252Bh
  4547.     BH = 0Ah
  4548.     BL = subfunction
  4549.         00h set page table entry for linear address
  4550.         ECX = linear address for which to get page table entry
  4551.         01h set page table entry for logical address
  4552.         ES:ECX = address for which to get page table entry
  4553.     ESI = page table entry
  4554.     EDI = additional page table information
  4555. Return: CF clear if successful
  4556.     CF set on error
  4557.         EAX = error code
  4558.         0009h invalid address
  4559.         0082h running under DPMI
  4560. SeeAlso: AX=252Bh/BH=09h
  4561. --------E-21252BBH0B-------------------------
  4562. INT 21 P - Phar Lap 386/DOS-Extender v4.1+ - MAP DATA FILE AT FILE OFFSET
  4563.     AX = 252Bh
  4564.     BH = 0Bh
  4565.     BL = subfunction
  4566.         00h by linear address
  4567.         ECX = linear address at which to map data file
  4568.         01h by logical address
  4569.         ES:ECX = logical address at which to map data file
  4570.     EDX = number of bytes to map
  4571.     DS:ESI -> mapping structure (see #1027)
  4572.     DS:EDI -> ASCIZ filename
  4573. Return: CF clear if successful
  4574.     CF set on error
  4575.         EAX = error code
  4576.         0002h file error
  4577.             ECX = phase (01h opening file, 02h seeking, 03h reading)
  4578.             EDX = error code returned by DOS
  4579.         0009h invalid address
  4580.         0081h invalid parameters or 386|VMM not present
  4581.         0086h all 386|VMM file handles already in use
  4582. SeeAlso: AX=252Bh/BH=03h,AX=252Bh/BH=09h
  4583.  
  4584. Format of Phar Lap mapping structure:
  4585. Offset    Size    Description    (Table 1027)
  4586.  00h    DWORD    starting file offset to be mapped
  4587.  04h    DWORD    DOS file access and sharing modes (see #1057 at INT 21/AH=3Dh)
  4588. --------E-21252C-----------------------------
  4589. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - ADD UNMAPPED PAGES AT END OF SEGMENT
  4590.     AX = 252Ch
  4591.     BX = segment selector
  4592.     ECX = number of 4K pages to add
  4593. Return: CF clear if successful
  4594.         EAX = offset in segment of beginning of unmapped pages
  4595.     CF set on error
  4596.         EAX = error code
  4597.         08h insufficent memory
  4598.         09h invalid selector
  4599.         82h not supported by current DPMI
  4600. --------E-21252D-----------------------------
  4601. INT 21 P - Phar Lap 386/DOS-Extender VMM v2.3+ - CLOSE VMM FILE HANDLE
  4602.     AX = 252Dh
  4603.     EBX = VMM file handle
  4604. Return: CF clear if successful
  4605.     CF set on error
  4606.         EAX = error code (81h invalid VMM handle)
  4607. --------E-21252E-----------------------------
  4608. INT 21 P - Phar Lap 386/DOS-Extender VMM v2.3+ - GET/SET VMM PARAMETERS
  4609.     AX = 252Eh
  4610.     CL = direction (00h get parameters, 01h set parameters)
  4611.     DS:EBX -> parameter buffer (see #1028)
  4612. Return: CF clear if successful
  4613.     CF set on error
  4614.         EAX = error code (81h bad parameter value)
  4615.  
  4616. Format of Phar Lap VMM parameter buffer:
  4617. Offset    Size    Description    (Table 1028)
  4618.  00h    DWORD    flags
  4619.         bit 0: page fault logging enabled
  4620.         ---v5.0+ ---
  4621.         bit 1: swap extender to disk during DOS EXEC call
  4622.         bit 2: don't zero allocated memory
  4623.  04h    DWORD    scan period for page aging, in milliseconds
  4624.  08h    DWORD    maximum size (in bytes) to check on each page scan
  4625.  0Ch 52 BYTEs    unused
  4626. --------E-21252F-----------------------------
  4627. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - WRITE RECORD TO VMM PAGE LOG FILE
  4628.     AX = 252Fh
  4629.     DS:EBX -> data to be written
  4630.     CX = size of data in bytes
  4631. Return: CF clear if successful
  4632.     CF set on error
  4633.         EAX = error code (85h no page log file or not 386/VMM)
  4634. --------E-212530-----------------------------
  4635. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.3+ - SET SIZE OF BUFFER FOR DOS CALLS
  4636.     AX = 2530h
  4637.     ECX = size of data buffer in bytes (1024 to 65536)
  4638. Return: CF clear if successful
  4639.     CF set on error
  4640.         EAX = error code
  4641.         08h insufficient low memory
  4642.         81h invalid size
  4643. SeeAlso: AX=2517h
  4644. --------E-212531-----------------------------
  4645. INT 21 P - Phar Lap 386/DOS-Extender VMM v3.0 - READ/WRITE LDT DESCRIPTOR
  4646.     AX = 2531h
  4647.     BX = segment selector
  4648.     ECX = direction (00h read, 01h write)
  4649.     DS:EDX -> 8-byte buffer for descriptor contents
  4650. Return: CF clear if successful
  4651.     CF set on error
  4652.         EAX = error code
  4653.         81h invalid selector
  4654.         82h DPMI running, or not a code or data segment
  4655. --------E-212532-----------------------------
  4656. INT 21 P - Phar Lap 386/DOS-Extender - GET EXCEPTION HANDLER VECTOR
  4657.     AX = 2532h
  4658.     CL = exception number (00h-0Fh)
  4659. Return: CF clear if successful
  4660.         ES:EBX = CS:EIP of current exception handler
  4661.     CF set on error (CL > 0Fh)
  4662. Notes:    this call is also supported by the FlashTek X-32VM extender
  4663.     this function is incompatible with 386|VMM; use AX=2522h instead
  4664. SeeAlso: AX=2522h,AX=2533h
  4665. --------E-212533-----------------------------
  4666. INT 21 P - Phar Lap 386/DOS-Extender - SET EXCEPTION HANDLER VECTOR
  4667.     AX = 2533h
  4668.     CL = exception number (00h-0Fh)
  4669.     DS:EDX = CS:EIP of new exception handler
  4670. Return: CF clear if successful
  4671.     CF set on error (CL > 0Fh)
  4672. Notes:    this call is also supported by the FlashTek X-32VM extender
  4673.     this function is incompatible with 386|VMM; use AX=2522h instead
  4674. SeeAlso: AX=2522h,AX=2532h
  4675. --------E-212534-----------------------------
  4676. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - GET INTERRUPT FLAG
  4677.     AX = 2534h
  4678. Return: CF clear
  4679.     EAX = interrupt state (00h disabled, 01h enabled)
  4680. --------E-212535-----------------------------
  4681. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - READ/WRITE SYSTEM REGISTERS
  4682.     AX = 2535h
  4683.     EBX = direction (00h read registers, 01h write)
  4684.     DS:EDX -> system register record (see #1029)
  4685. Return: CF clear
  4686. Note:    this call is only available under MS Windows if PHARLAP.386 VDD is
  4687.       installed
  4688.  
  4689. Format of Phar Lap system register record:
  4690. Offset    Size    Description    (Table 1029)
  4691.  00h    DWORD    CR0
  4692.  04h  4 DWORDs    DR0,DR1,DR2,DR3
  4693.  14h  2 DWORDs    reserved
  4694.  1Ch  2 DWORDs    DR6,DR7
  4695.  24h  3 DWORDs    reserved
  4696. --------E-212536----------------------------
  4697. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0+ - MIN/MAX EXTENDED/CONV MEMORY USAGE
  4698.     AX = 2536h
  4699.     EBX = bit flags
  4700.         bit 0: modifying conventional memory rather than extended memory
  4701.         bit 1: setting maximum memory usage rather than minimum
  4702.     ECX = new limit in 4K pages
  4703. Return: CF clear if successful
  4704.         EAX = new limit
  4705.     CF set on error
  4706.         EAX = error code (08h memory error or -NOPAGE set)
  4707.         EBX = maximum limit in pages
  4708.         ECX = minimum limit in pages
  4709. --------E-212537----------------------------
  4710. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - ALLOCATE DOS MEMORY ABOVE DOS BUFFER
  4711.     AX = 2537h
  4712.     BX = number of paragraphs to allocate
  4713. Return: CF clear if successful
  4714.         AX = real-mode segment of allocated block
  4715.     CF set on error
  4716.         AX = error code
  4717.         07h MS-DOS memory chain corrupted
  4718.         08h insufficient low memory
  4719.         BX = size in paragraphs of largest free block
  4720. SeeAlso: AH=48h
  4721. --------E-212538----------------------------
  4722. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - READ PROTMODE REGS AFTER SFTWARE INT
  4723.     AX = 2538h
  4724.     DS:EBX -> buffer for registers (see #1022)
  4725.     ECX = register record to retrieve
  4726.         00h first interrupt state
  4727.         01h next interrupt state
  4728.         EDX = handle for current interrupt state
  4729. Return: CF clear if successful
  4730.         DS:EBX buffer filled
  4731.         EDX = handle of current interrupt state
  4732.         ESI = number of interrupt which occurred
  4733.     CF set on error
  4734.         EAX = error code
  4735.         81h invalid handle in EDX
  4736.         83h register saving not enabled
  4737.         84h no more interrupt states
  4738. SeeAlso: AX=2527h,AX=2528h
  4739. --------E-212539----------------------------
  4740. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - GET OFFSET OF .EXP FILE HEADER
  4741.     AX = 2539h
  4742.     BX = MS-DOS file handle for open file
  4743. Return: CF clear if successful
  4744.         EAX = offset of .EXP header in file
  4745.     CF set on error
  4746.         EAX = error code (02h file error)
  4747.         EBX = file error code
  4748.         02h DOS error seeking
  4749.         03h DOS error reading
  4750.         04h invalid file type
  4751.         05h invalid file format
  4752.         ECX = DOS error code if EBX=02h or 03h
  4753.     current file position in file modified
  4754. --------E-21253A----------------------------
  4755. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - INSTALL MOD. SEG FAILURE HANDLER
  4756.     AX = 253Ah
  4757.     ES:EBX -> function to be called when INT 21/AH=4Ah is about to return
  4758.         an error
  4759. Return: CF clear
  4760.     ES:EBX -> previous handler
  4761. SeeAlso: AH=4Ah
  4762. --------E-21253B----------------------------
  4763. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - JUMP TO REAL MODE CODE, NO CONTEXT
  4764.     AX = 253Bh
  4765.     DS:EBX -> buffer containing register contents (see #1022)
  4766. Return: never returns
  4767. SeeAlso: AX=2528h
  4768. --------E-21253C-----------------------------
  4769. INT 21 P - Phar Lap 386/DOS-Extender VMM v3.0+ - SHRINK 386|VMM SWAP FILE
  4770.     AX = 253Ch
  4771. Return: CF clear
  4772.     EAX = old size of swap file in bytes
  4773.     EBX = new size of swap file in bytes
  4774. --------E-21253D-----------------------------
  4775. INT 21 P - Phar Lap 386/DOS-Extender v4.0+ - READ/WRITE IDT DESCRIPTOR
  4776.     AX = 253Dh
  4777.     BL = interrupt number
  4778.     ECX = direction (0 = read, 1 = write)
  4779.     DS:EDX -> 8-byte buffer for descriptor
  4780. Return: CF clear if successful
  4781.         DS:EDX filled if reading
  4782.     CF set on error
  4783.         EAX = error code (0082h if running under DPMI)
  4784. Desc:    access hardware-level IDT rather than the internal 386/DOS-Extender
  4785.       shadow IDT
  4786. Notes:    this call will always fail under DPMI because it is not possible to
  4787.       access the IDT
  4788.     the descriptor is not checked when writing
  4789.     this call can normally be used only by programs running in ring 0
  4790.       because the processor does not allow an interrupt to be vectored to
  4791.       a less privileged ring
  4792. --------E-21253F-----------------------------
  4793. INT 21 Pu - Phar Lap 386/DOS-Extender v6.0+ - ALLOCATE LDT DESCRIPTOR
  4794.     AX = 253Fh
  4795.     BX = LDT descriptor to allocate (0000h for any)
  4796.     ???
  4797. Return: ???
  4798. --------E-212540-----------------------------
  4799. INT 21 Pu - Phar Lap 386/DOS-Extender v6.0+ - FORCE ALIAS OF SEGMENT
  4800.     AX = 2540h
  4801.     ???
  4802. Return: ???
  4803. --------E-212544-----------------------------
  4804. INT 21 Pu - Phar Lap 386/DOS-Extender v6.0+ - FREE DLL
  4805.     AX = 2544h
  4806.     ???
  4807. Return: ???
  4808. --------E-212545-----------------------------
  4809. INT 21 Pu - Phar Lap 386/DOS-Extender v6.0+ - GET/SET PROCEDURE ADDRESS
  4810.     AX = 2545h
  4811.     ECX = direction (00h get, 01h set)
  4812.     ???
  4813. Return: ???
  4814. --------E-212546-----------------------------
  4815. INT 21 Pu - Phar Lap 386/DOS-Extender v6.0+ - GET MODULE HANDLE
  4816.     AX = 2546h
  4817.     ???
  4818. Return: ???
  4819. --------E-2125C0-----------------------------
  4820. INT 21 P - Phar Lap 386/DOS-Extender - ALLOCATE MS-DOS MEMORY BLOCK
  4821.     AX = 25C0h
  4822.     BX = number of 16-byte paragraphs of MS-DOS memory requested
  4823. Return: CF clear if successful
  4824.         AX = real-mode paragraph address of memory
  4825.     CF set on error
  4826.         AX = error code
  4827.         07h MS-DOS memory control blocks destroyed
  4828.         08h insufficient memory
  4829.         BX = size in paragraphs of largest available memory block
  4830. SeeAlso: AX=25C1h,AX=25C2h
  4831. --------E-2125C1-----------------------------
  4832. INT 21 P - Phar Lap 386/DOS-Extender - RELEASE MS-DOS MEMORY BLOCK
  4833.     AX = 25C1h
  4834.     CX = real-mode paragraph address of memory block to free
  4835. Return: CF clear if successful
  4836.         EAX destroyed
  4837.     CF set on error
  4838.         AX = error code
  4839.         07h MS-DOS memory control blocks destroyed
  4840.         09h invalid memory block address in CX
  4841. SeeAlso: AX=25C0h,AX=25C2h
  4842. --------E-2125C2-----------------------------
  4843. INT 21 P - Phar Lap 386/DOS-Extender - MODIFY MS-DOS MEMORY BLOCK
  4844.     AX = 25C2h
  4845.     BX = new requested block size in paragraphs
  4846.     CX = real-mode paragraph address of memory block to modify
  4847. Return: CF clear if successful
  4848.         EAX destroyed
  4849.     CF set on error
  4850.         AX = error code
  4851.         07h MS-DOS memory control blocks destroyed
  4852.         08h insufficient memory
  4853.         09h invalid memory block address in CX
  4854.         BX = size in paragraphs of largest available memory block
  4855. SeeAlso: AX=25C0h,AX=25C1h
  4856. --------E-2125C3-----------------------------
  4857. INT 21 P - Phar Lap 386/DOS-Extender - EXECUTE PROGRAM
  4858.     AX = 25C3h
  4859.     ES:EBX -> pointer to parameter block (see #1031)
  4860.     DS:EDX -> pointer to ASCIZ program filename
  4861. Return: CF clear if successful
  4862.         all registers unchanged
  4863.     CF set on error
  4864.         EAX = error code (see #1030)
  4865.  
  4866. (Table 1030)
  4867. Values for Phar Lap error code:
  4868.  01h    function code in AL is invalid ???
  4869.  02h    file not found or path invalid
  4870.  05h    access denied
  4871.  08h    insufficient memory to load program
  4872.  0Ah    environment invalid
  4873.  0Bh    invalid file format
  4874.  
  4875. Format of parameter block:
  4876. Offset    Size    Description    (Table 1031)
  4877.  00h    DWORD    32-bit offset of environment string
  4878.  04h    WORD    segment selector of environment string
  4879.  06h    DWORD    32-bit offset of command-tail string
  4880.  0Ah    WORD    segment selector of command-tail string
  4881. --------D-2126-------------------------------
  4882. INT 21 - DOS 1+ - CREATE NEW PROGRAM SEGMENT PREFIX
  4883.     AH = 26h
  4884.     DX = segment at which to create PSP (see #1032)
  4885. Return: AL destroyed
  4886. Notes:    new PSP is updated with memory size information; INTs 22h, 23h, 24h
  4887.       taken from interrupt vector table; the parent PSP field is set to 0
  4888.     (DOS 2+) DOS assumes that the caller's CS is the segment of the PSP to
  4889.       copy
  4890. SeeAlso: AH=4Bh,AH=50h,AH=51h,AH=55h,AH=62h,AH=67h
  4891.  
  4892. Format of Program Segment Prefix (PSP):
  4893. Offset    Size    Description    (Table 1032)
  4894.  00h  2 BYTEs    INT 20 instruction for CP/M CALL 0 program termination
  4895.         the CDh 20h here is often used as a signature for a valid PSP
  4896.  02h    WORD    segment of first byte beyond memory allocated to program
  4897.  04h    BYTE    (DOS) unused filler
  4898.         (OS/2) count of fake DOS version returns
  4899.  05h    BYTE    CP/M CALL 5 service request (FAR CALL to absolute 000C0h)
  4900.         BUG: (DOS 2+ DEBUG) PSPs created by DEBUG point at 000BEh
  4901.  06h    WORD    CP/M compatibility--size of first segment for .COM files
  4902.  08h  2 BYTEs    remainder of FAR JMP at 05h
  4903.  0Ah    DWORD    stored INT 22 termination address
  4904.  0Eh    DWORD    stored INT 23 control-Break handler address
  4905.  12h    DWORD    DOS 1.1+ stored INT 24 critical error handler address
  4906.  16h    WORD    segment of parent PSP
  4907.  18h 20 BYTEs    DOS 2+ Job File Table, one byte per file handle, FFh = closed
  4908.  2Ch    WORD    DOS 2+ segment of environment for process (see #1033)
  4909.  2Eh    DWORD    DOS 2+ process's SS:SP on entry to last INT 21 call
  4910.  32h    WORD    DOS 3+ number of entries in JFT (default 20)
  4911.  34h    DWORD    DOS 3+ pointer to JFT (default PSP:0018h)
  4912.  38h    DWORD    DOS 3+ pointer to previous PSP (default FFFFFFFFh in 3.x)
  4913.         used by SHARE in DOS 3.3
  4914.  3Ch    BYTE    DOS 4+ (DBCS) interim console flag (see AX=6301h)
  4915.         Novell DOS 7 DBCS interim flag as set with AX=6301h
  4916.         (possibly also used by Far East MS-DOS 3.2-3.3)
  4917.  3Dh    BYTE    (APPEND) TrueName flag (see INT 2F/AX=B711h)
  4918.  3Eh    BYTE    (Novell NetWare) flag: next byte initialized if CEh
  4919.         (OS/2) capabilities flag
  4920.  3Fh    BYTE    (Novell NetWare) Novell task number if previous byte is CEh
  4921.  40h  2 BYTEs    DOS 5+ version to return on INT 21/AH=30h
  4922.  42h    WORD    (MSWindows3) selector of next PSP (PDB) in linked list
  4923.         Windows keeps a linked list of Windows programs only
  4924.  44h    WORD    (MSWindows3) "PDB_Partition"
  4925.  46h    WORD    (MSWindows3) "PDB_NextPDB"
  4926.  48h    BYTE    (MSWindows3) bit 0 set if non-Windows application (WINOLDAP)
  4927.  49h    BYTE    unused by DOS versions <= 6.00
  4928.  4Ch    WORD    (MSWindows3) "PDB_EntryStack"
  4929.  4Eh  2 BYTEs    unused by DOS versions <= 6.00
  4930.  50h  3 BYTEs    DOS 2+ service request (INT 21/RETF instructions)
  4931.  53h  2 BYTEs    unused in DOS versions <= 6.00
  4932.  55h  7 BYTEs    unused in DOS versions <= 6.00; can be used to make first FCB
  4933.           into an extended FCB
  4934.  5Ch 16 BYTEs    first default FCB, filled in from first commandline argument
  4935.         overwrites second FCB if opened
  4936.  6Ch 16 BYTEs    second default FCB, filled in from second commandline argument
  4937.           overwrites beginning of commandline if opened
  4938.  7Ch  4 BYTEs    unused
  4939.  80h 128 BYTEs    commandline / default DTA
  4940.         command tail is BYTE for length of tail, N BYTEs for the tail,
  4941.           followed by a BYTE containing 0Dh
  4942. Notes:    in DOS v3+, the limit on simultaneously open files may be increased by
  4943.       allocating memory for a new open file table, filling it with FFh,
  4944.       copying the first 20 bytes from the default table, and adjusting the
  4945.       pointer and count at 34h and 32h.  However, DOS will only copy the
  4946.       first 20 file handles into a child PSP (including the one created on
  4947.       EXEC).
  4948.     in an OS/2 DOS box, values of D0h-FEh in the open file table indicate
  4949.       device drivers
  4950.     network redirectors based on the original MS-Net implementation use
  4951.       values of 80h-FEh in the open file table to indicate remote files;
  4952.       Novell NetWare also uses values from FEh down to 80h or one more than
  4953.       FILES= (whichever is greater) to indicate remote files (except on
  4954.       OS/2, where is uses CFh down to 80h)
  4955.     MS-DOS 5.00 incorrectly fills the FCB fields when loading a program
  4956.       high; the first FCB is empty and the second contains the first
  4957.       parameter
  4958.     some DOS extenders place protected-mode values in various PSP fields
  4959.       such as the "parent" field, which can confuse PSP walkers.  Always
  4960.       check either for the CDh 20h signature or that the suspected PSP is
  4961.       at the beginning of a memory block which owns itself (the preceding
  4962.       paragraph should be a valid MCB with "owner" the same as the
  4963.       suspected PSP).
  4964.     Novell NetWare updates the fields at offsets 3Eh and 3Fh without
  4965.       checking that a legal PSP segment is current; see AH=50h for further
  4966.       discussion
  4967.     for 4DOS and Windows95, the command tail may be more than 126
  4968.       characters; in that case, the length byte will be set to 7Fh (with
  4969.       an 0Dh in the     127th position at offset FFh), and the first 126
  4970.       characters will be stored in the PSP, with the entire command line
  4971.       in the environment variable CMDLINE; under at least some versions
  4972.       of 4DOS, the byte at offset FFh is *not* set to 0Dh, so there is no
  4973.       terminating carriage return in the PSP's command tail.
  4974.  
  4975. Format of environment block:
  4976. Offset    Size    Description    (Table 1033)
  4977.  00h  N BYTEs    first environment variable, ASCIZ string of form "var=value"
  4978.       N BYTEs    second environment variable, ASCIZ string
  4979.     ...
  4980.       N BYTEs    last environment variable, ASCIZ string of form "var=value"
  4981.     BYTE    00h
  4982. ---DOS 3.0+ ---
  4983.     WORD    number of strings following environment (normally 1)
  4984.       N BYTEs    ASCIZ full pathname of program owning this environment
  4985.         other strings may follow
  4986. --------D-2127-------------------------------
  4987. INT 21 - DOS 1+ - RANDOM BLOCK READ FROM FCB FILE
  4988.     AH = 27h
  4989.     CX = number of records to read
  4990.     DS:DX -> opened FCB (see #1000)
  4991. Return: AL = status
  4992.         00h successful, all records read
  4993.         01h end of file, no data read
  4994.         02h segment wrap in DTA, no data read
  4995.         03h end of file, partial read
  4996.     Disk Transfer Area filled with records read from file
  4997.     CX = number of records read (return AL = 00h or 03h)
  4998. Notes:    read begins at current file position as specified in FCB; the file
  4999.       position is updated after reading
  5000.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  5001. SeeAlso: AH=21h,AH=28h,AH=3Fh"DOS"
  5002. --------D-2128-------------------------------
  5003. INT 21 - DOS 1+ - RANDOM BLOCK WRITE TO FCB FILE
  5004.     AH = 28h
  5005.     CX = number of records to write
  5006.     DS:DX -> opened FCB (see #1000)
  5007.     Disk Transfer Area contains records to be written
  5008. Return: AL = status
  5009.         00h successful
  5010.         01h disk full or file read-only
  5011.         02h segment wrap in DTA
  5012.     CX = number of records written
  5013. Notes:    write begins at current file position as specified in FCB; the file
  5014.       position is updated after writing
  5015.     if CX = 0000h on entry, no data is written; instead the file size is
  5016.       adjusted to be the same as the file position specified by the random
  5017.       record and record size fields of the FCB
  5018.     if the data to be written is less than a disk sector, it is copied into
  5019.       a DOS disk buffer, to be written out to disk at a later time
  5020.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  5021. SeeAlso: AH=22h,AH=27h,AH=40h,AH=59h/BX=0000h
  5022. --------D-2129-------------------------------
  5023. INT 21 - DOS 1+ - PARSE FILENAME INTO FCB
  5024.     AH = 29h
  5025.     AL = parsing options (see #1034)
  5026.     DS:SI -> filename string (both '*' and '?' wildcards OK)
  5027.     ES:DI -> buffer for unopened FCB
  5028. Return: AL = result code
  5029.         00h successful parse, no wildcards encountered
  5030.         01h successful parse, wildcards present
  5031.         FFh failed (invalid drive specifier)
  5032.     DS:SI -> first unparsed character
  5033.     ES:DI buffer filled with unopened FCB (see #1000)
  5034. Notes:    asterisks expanded to question marks in the FCB
  5035.     all processing stops when a filename terminator is encountered
  5036.     cannot be used with filespecs which include a path (DOS 2+)
  5037.     Novell NetWare monitors the result code since an 'invalid drive' may
  5038.       signal an attempt to reconnect a network drive; if there are no
  5039.       connections to the specified drive, NetWare attempts to build a
  5040.       connection and map the drive to the SYS:LOGIN directory
  5041. SeeAlso: AH=0Fh,AH=16h,AH=26h
  5042.  
  5043. Bitfields for parsing options:
  5044. Bit(s)    Description    (Table 1034)
  5045.  0    skip leading separators
  5046.  1    use existing drive number in FCB if no drive is specified, instead of
  5047.       setting field to zero
  5048.  2    use existing filename in FCB if no base name is specified, instead of
  5049.       filling field with blanks
  5050.  3    use existing extension in FCB if no extension is specified, instead of
  5051.       filling field with blanks
  5052.  4-7    reserved (0)
  5053. --------D-212A-------------------------------
  5054. INT 21 - DOS 1+ - GET SYSTEM DATE
  5055.     AH = 2Ah
  5056. Return: CX = year (1980-2099)
  5057.     DH = month
  5058.     DL = day
  5059. ---DOS 1.10+---
  5060.     AL = day of week (00h=Sunday)
  5061. SeeAlso: AH=2Bh"DOS",AH=2Ch,AH=E7h"Novell",INT 1A/AH=04h,INT 2F/AX=120Dh
  5062. --------D-212B-------------------------------
  5063. INT 21 - DOS 1+ - SET SYSTEM DATE
  5064.     AH = 2Bh
  5065.     CX = year (1980-2099)
  5066.     DH = month
  5067.     DL = day
  5068. Return: AL = status
  5069.         00h successful
  5070.         FFh invalid date, system date unchanged
  5071. Note:    DOS 3.3+ also sets CMOS clock
  5072. SeeAlso: AH=2Ah,AH=2Dh,INT 1A/AH=05h
  5073. --------E-212B--CX4149-----------------------
  5074. INT 21 - AI Architects - ??? - INSTALLATION CHECK
  5075.     AH = 2Bh
  5076.     CX = 4149h ('AI')
  5077.     DX = 413Fh ('A?')
  5078. Return: AL <> FFh if installed
  5079. Note:    Borland's TKERNEL makes this call
  5080. --------c-212B--CX4358-----------------------
  5081. INT 21 - Super PC-Kwik v3.20+ - INSTALLATION CHECK
  5082.     AH = 2Bh
  5083.     CX = 4358h ('CX')
  5084. Return: AL = FFh if PC-Kwik/PC-Cache not installed
  5085.     AL = 00h if installed
  5086.         CF clear
  5087.         CX = 6378h ('cx')
  5088.         BX = ???
  5089.         DX = version (DH = major version, DL = binary minor version)
  5090. Note:    PC Tools PC-Cache v5.x and Qualitas Qcache v4.00 are OEM versions of
  5091.       Super PC-Kwik, and thus support this call (PC-Cache 5.1 corresponds
  5092.       to PC-Kwik v3.20)
  5093. SeeAlso: INT 13/AH=A0h,INT 13/AH=B0h,INT 16/AX=FFA5h/CX=1111h
  5094. Index:    PC-Cache;installation check|Qualitas Qcache;installation check
  5095. Index:    installation check;PC-Cache 5.x|installation check;Qualitas Qcache
  5096. --------Q-212B--CX4445-----------------------
  5097. INT 21 - DESQview - INSTALLATION CHECK
  5098.     AH = 2Bh
  5099.     CX = 4445h ('DE')
  5100.     DX = 5351h ('SQ')
  5101.     AL = subfunction (DV v2.00+)
  5102.         01h get version
  5103.         Return: BX = version (BH = major, BL = minor)
  5104.         Note: early copies of v2.00 return 0002h
  5105.         02h get shadow buffer info, and start shadowing
  5106.         Return: BH = rows in shadow buffer
  5107.             BL = columns in shadow buffer
  5108.             DX = segment of shadow buffer
  5109.         04h get shadow buffer info
  5110.         Return: BH = rows in shadow buffer
  5111.             BL = columns in shadow buffer
  5112.             DX = segment of shadow buffer
  5113.         05h stop shadowing
  5114. Return: AL = FFh if DESQview not installed
  5115. Notes:    in DESQview v1.x, there were no subfunctions; this call only identified
  5116.       whether or not DESQview was loaded.  DESQview v2.52 performs function
  5117.       01h for all subfunction requests 0Ch and higher and appears to ignore
  5118.       all lower-numbered functions not listed here.
  5119.     DESQview versions 2.50-2.52 are part of DESQview/X v1.0x; version 2.53
  5120.       is part of DESQview/X v1.10; and version 2.63 is part of DESQview/X
  5121.       v2.00.
  5122. BUG:    subfunction 05h does not appear to work correctly in DESQview 2.52
  5123. SeeAlso: INT 10/AH=FEh,INT 10/AH=FFh,INT 15/AX=1024h,INT 15/AX=DE30h
  5124. --------U-212B--CX454C-----------------------
  5125. INT 21 - ELRES v1.1 - INSTALLATION CHECK
  5126.     AH = 2Bh
  5127.     CX = 454Ch ('EL')
  5128.     DX = 5253h ('RS')
  5129. Return: ES:BX -> ELRES history structure (see #1035)
  5130.     DX = DABEh (signature, DAve BEnnett)
  5131. Program: ELRES is an MS-DOS return code (errorlevel) recorder by David H.
  5132.       Bennett which stores recent errorlevel values, allows them to be
  5133.       retrieved for use in batch files, and can place them in an
  5134.       environment variable
  5135. SeeAlso: AH=4Bh"ELRES",AH=4Dh
  5136.  
  5137. Format of ELRES history structure:
  5138. Offset    Size    Description    (Table 1035)
  5139.  00h    WORD    number of return codes which can be stored by following buffer
  5140.  02h    WORD    current position in buffer (treated as a ring)
  5141.  04h  N BYTEs    ELRES buffer
  5142. --------l-212B00CX5643-----------------------
  5143. INT 21 - The Volkov Commander - GET POINTER TO LEFT PANEL DATA STRUCTURE
  5144.     AX = 2B00h
  5145.     CX = 5643h ('VC')
  5146.     DX = 4F4Dh ('OM')
  5147. Return: AL = 0
  5148.     ES:BX -> left panel data structure
  5149. Program: Volcov Commander is a shell for MS-DOS by Vsevolod V. Volkov
  5150. SeeAlso: AX=2B01h/CX=5643h,AX=2B02h/CX=5643h
  5151. --------l-212B01CX5643-----------------------
  5152. INT 21 - The Volkov Commander - GET POINTER TO RIGHT PANEL DATA STRUCTURE
  5153.     AX = 2B01h
  5154.     CX = 5643h ('VC')
  5155.     DX = 4F4Dh ('OM')
  5156. Return: AL = 0
  5157.     ES:BX -> right panel data structure
  5158. SeeAlso: AX=2B00h/CX=5643h,AX=2B02h/CX=5643h
  5159. --------l-212B02CX5643-----------------------
  5160. INT 21 - The Volkov Commander - GET POINTER TO GLOBAL VARIABLES
  5161.     AX = 2B02h
  5162.     CX = 5643h ('VC')
  5163.     DX = 4F4Dh ('OM')
  5164. Return: AL = 0
  5165.     ES:BX -> global variables
  5166. SeeAlso: AX=2B00h/CX=5643h,AX=2B01h/CX=5643h
  5167. --------m-212B01CX444D-----------------------
  5168. INT 21 - Quarterdeck DOS-UP.SYS v2.00 - INSTALLATION CHECK
  5169.     AX = 2B01h
  5170.     CX = 444Dh ('DM')
  5171.     DX = 4158h ('AX')
  5172. Return: AX = 0000h if installed
  5173.         BX = DOS-UP version (BH = minor, BL = major)
  5174.         CX = 4845h ('HE')
  5175.         DX = 5245h ('RE')
  5176.         ES = DOS-UP driver segment
  5177. --------T-212B01CX5441-----------------------
  5178. INT 21 - TAME v2.10+ - INSTALLATION CHECK
  5179.     AX = 2B01h
  5180.     CX = 5441h ('TA')
  5181.     DX = 4D45h ('ME')
  5182. ---v2.60---
  5183.     BH = ???
  5184.         00h skip ???, else do
  5185. Return: AL = 02h if installed
  5186.     ES:DX -> data area in TAME-RES (see #1036,#1040,#1042)
  5187. Program: TAME is a shareware program by David G. Thomas which gives up CPU
  5188.       time to other partitions under a multitasker when the current
  5189.       partition's program incessantly polls the keyboard or system time
  5190.  
  5191. Format of TAME 2.10-2.20 data area:
  5192. Offset    Size    Description    (Table 1036)
  5193.  00h    BYTE    data structure minor version number (01h in TAME 2.20)
  5194.  01h    BYTE    data structure major version number (07h in TAME 2.20)
  5195.  02h    DWORD    number of task switches
  5196.  06h    DWORD    number of keyboard polls
  5197.  0Ah    DWORD    number of time polls
  5198.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  5199.  12h    DWORD    original INT 10h
  5200.  16h    DWORD    original INT 14h
  5201.  1Ah    DWORD    original INT 15h
  5202.  1Eh    DWORD    original INT 16h
  5203.  22h    DWORD    original INT 17h
  5204.  26h    DWORD    original INT 21h
  5205.  2Ah    DWORD    original INT 28h
  5206.  2Eh    WORD    offset of TAME INT 10h handler
  5207.  30h    WORD    offset of TAME INT 14h handler
  5208.  32h    WORD    offset of TAME INT 15h handler
  5209.  34h    WORD    offset of TAME INT 16h handler
  5210.  36h    WORD    offset of TAME INT 17h handler
  5211.  38h    WORD    offset of TAME INT 21h handler
  5212.  3Ah    WORD    offset of TAME INT 28h handler
  5213.  3Ch    WORD    X in /max:X,Y or /freq:X,Y
  5214.  3Eh    WORD    Y in /max:X,Y or /freq:X,Y
  5215.  40h    WORD    number of polls remaining before next task switch
  5216.  42h    WORD    /KEYIDLE value
  5217.  44h    BYTE    interrupts already grabbed by TAME (see #1037)
  5218.  45h    BYTE    flags for interrupts which may be acted on (same bits as above)
  5219.  46h    BYTE    TAME enabled (01h) or disabled (00h)
  5220.  47h    BYTE    /TIMEPOLL (01h) or /NOTIMEPOLL (00h)
  5221.  48h    BYTE    /NOTIMER (01h) or /TIMER (00h)
  5222.  49h    BYTE    window or task number for this task
  5223.  4Ah    BYTE    multitasker type (see #1038)
  5224.  4Bh    BYTE    type of task switching selected
  5225.         bit 0: DESQview???
  5226.         bit 1: DoubleDOS???
  5227.         bit 2: TopView???
  5228.         bit 3: KeySwitch
  5229.         bit 4: HLT instruction
  5230.  4Ch    BYTE    ???
  5231.  4Dh    BYTE    flags
  5232.         bit 1: /FREQ instead of /MAX
  5233.  4Eh    BYTE    /FG: value
  5234.  4Fh    BYTE    task switches left until next FGONLY DESQview API call
  5235.  50h    BYTE    ???
  5236.  
  5237. Bitfields for interrupts already grabbed by TAME:
  5238. Bit(s)    Description    (Table 1037)
  5239.  0    INT 10h
  5240.  1    INT 14h
  5241.  2    INT 15h
  5242.  3    INT 16h
  5243.  4    INT 17h
  5244.  5    INT 21h
  5245.  6    INT 28h
  5246.  
  5247. (Table 1038)
  5248. Values for multitasker type:
  5249.  01h    DESQview
  5250.  02h    DoubleDOS
  5251.  03h    TopView
  5252.  04h    OmniView
  5253.  05h    VM/386
  5254.  
  5255. Bitfields for type of task switching selected:
  5256. Bit(s)    Description    (Table 1039)
  5257.  0    DESQview
  5258.  1    DoubleDOS
  5259.  2    TopView
  5260.  3    OmniView
  5261.  4    KeySwitch
  5262.  5    HLT instruction
  5263.  
  5264. Format of TAME 2.30 data area:
  5265. Offset    Size    Description    (Table 1040)
  5266.  00h    BYTE    data structure minor version number (02h in TAME 2.30)
  5267.  01h    BYTE    data structure major version number (0Ah in TAME 2.30)
  5268.  02h    DWORD    number of task switches
  5269.  06h    DWORD    number of keyboard polls
  5270.  0Ah    DWORD    number of time polls
  5271.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  5272.  12h    DWORD    time of last /CLEAR or TAME-RES load
  5273.  16h    DWORD    time yielded
  5274.  1Ah    DWORD    time spent polling
  5275.  1Eh    DWORD    time spent waiting on key input with INT 16/AH=01h,11h
  5276.  22h    DWORD    original INT 10h
  5277.  26h    DWORD    original INT 14h
  5278.  2Ah    DWORD    original INT 15h
  5279.  2Eh    DWORD    original INT 16h
  5280.  32h    DWORD    original INT 17h
  5281.  36h    DWORD    original INT 21h
  5282.  3Ah    DWORD    original INT 28h
  5283.  3Eh    WORD    offset of TAME INT 10h handler
  5284.  40h    WORD    offset of TAME INT 14h handler
  5285.  42h    WORD    offset of TAME INT 15h handler
  5286.  44h    WORD    offset of TAME INT 16h handler
  5287.  46h    WORD    offset of TAME INT 17h handler
  5288.  48h    WORD    offset of TAME INT 21h handler
  5289.  4Ah    WORD    offset of TAME INT 28h handler
  5290.  4Ch    WORD    X in /max:X,Y or /freq:X,Y
  5291.  4Eh    WORD    Y in /max:X,Y or /freq:X,Y
  5292.  50h    WORD    number of polls remaining before next task switch
  5293.  52h    WORD    /KEYIDLE value
  5294.  54h    WORD    /FG: value
  5295.  56h    WORD    task switches left until next FGONLY DESQview API call
  5296.  58h    WORD    multitasker version
  5297.  5Ah    WORD    virtual screen segment
  5298.  5Ch    BYTE    interrupts already grabbed by TAME (see #1037)
  5299.  5Dh    BYTE    flags for interrupts which may be acted on (same bits as above)
  5300.  5Eh    BYTE    window or task number for this task
  5301.  5Fh    BYTE    multitasker type (see #1038)
  5302.  60h    BYTE    type of task switching selected (bit flags) (see #1039)
  5303.  61h    BYTE    watch_DOS
  5304.  62h    BYTE    action flags (see #1041)
  5305.  63h    BYTE    old status
  5306.  64h    WORD    signature DA34h
  5307.  
  5308. Bitfields for TAME action flags:
  5309. Bit(s)    Description    (Table 1041)
  5310.  0    TAME enabled
  5311.  1    /FREQ instead of /MAX (X and Y count fields are per tick)
  5312.  2    /TIMEPOLL
  5313.  3    /KEYPOLL
  5314.  4    inhibit timer
  5315.  5    enable status monitoring
  5316. SeeAlso: #1040,#1042
  5317.  
  5318. Format of TAME 2.60 data area:
  5319. Offset    Size    Description    (Table 1042)
  5320.  00h    BYTE    data structure minor version number (02h in TAME 2.60)
  5321.  01h    BYTE    data structure major version number (0Bh in TAME 2.60)
  5322.  02h    DWORD    number of task switches
  5323.  06h    DWORD    number of keyboard polls
  5324.  0Ah    DWORD    number of time polls
  5325.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  5326.  12h    DWORD    time of last /CLEAR or TAME-RES load
  5327.  16h    DWORD    time yielded
  5328.  1Ah    DWORD    time spent polling
  5329.  1Eh    DWORD    time spent waiting on key input with INT 16/AH=01h,11h
  5330.  22h  4 BYTEs    ???
  5331.  26h    DWORD    original INT 10h
  5332.  2Ah    DWORD    original INT 14h
  5333.  2Eh    DWORD    original INT 15h
  5334.  32h    DWORD    original INT 16h
  5335.  36h    DWORD    original INT 17h
  5336.  3Ah    DWORD    original INT 21h
  5337.  3Eh    DWORD    original INT 28h
  5338.  42h    WORD    offset of TAME INT 10h handler
  5339.  44h    WORD    offset of TAME INT 14h handler
  5340.  46h    WORD    offset of TAME INT 15h handler
  5341.  48h    WORD    offset of TAME INT 16h handler
  5342.  4Ah    WORD    offset of TAME INT 17h handler
  5343.  4Ch    WORD    offset of TAME INT 21h handler
  5344.  4Eh    WORD    offset of TAME INT 28h handler
  5345.  50h    WORD    X in /max:X,Y or /freq:X,Y
  5346.  52h    WORD    Y in /max:X,Y or /freq:X,Y
  5347.  54h    WORD    number of polls remaining before next task switch
  5348.  56h    WORD    /KEYIDLE value
  5349.  58h  4 BYTEs    ???
  5350.  5Ch    WORD    X in /boost:X,Y
  5351.  5Eh    WORD    Y in /boost:X,Y
  5352.  60h    WORD    /FG: value
  5353.  62h    WORD    task switches remaining until next FGONLY DESQview API call
  5354.  64h    WORD    multitasker version ???
  5355.  66h    WORD    virtual screen segment
  5356.  68h    BYTE    interrupts already grabbed by TAME (see #1037)
  5357.  69h    BYTE    flags for interrupts which may be acted on (same bits as above)
  5358.  6Ah    BYTE    window or task number for this task
  5359.  6Bh    BYTE    multitasker type (see #1038)
  5360.  6Ch    BYTE    type of task switching selected (bit flags) (see #1039)
  5361.  6Dh    BYTE    watch_DOS
  5362.  6Eh    BYTE    action flags (see #1041)
  5363.  6Fh    BYTE    old status
  5364.  70h    WORD    signature DA34h
  5365. --------v-212B16CX0643-----------------------
  5366. INT 21 - VIRUS - "Maltese Amoeba" - INSTALLATION CHECK
  5367.     AX = 2B16h
  5368.     CX = 0643h
  5369. Return: AX = 1603h if installed
  5370. --------R-212B44BX4D41-----------------------
  5371. INT 21 - pcANYWHERE IV/LAN - INSTALLATION CHECK
  5372.     AX = 2B44h ('D')
  5373.     BX = 4D41h ('MA')
  5374.     CX = 7063h ('pc')
  5375.     DX = 4157h ('AW')
  5376. Return: AX = resident program
  5377.         4F4Bh ('OK') if large host resident
  5378.         6F6Bh ('ok') if small host resident
  5379.     CX:DX -> API entry point (see #1043)
  5380. SeeAlso: INT 16/AH=79h
  5381.  
  5382. (Table 1043)
  5383. Call pcANYWHERE API entry point with:
  5384.     AX = 0000h get pcANYWHERE IV version
  5385.         DS:SI -> BYTE buffer for host type code
  5386.         Return: AH = version number
  5387.             AL = revision number
  5388.             DS:DI buffer byte filled with
  5389.             00h full-featured host
  5390.             01h limited-feature LAN host
  5391.             other API may not be supported
  5392.     AX = 0001h initialize operation
  5393.         DS:SI -> initialization request structure (see #1044)
  5394.         Return: AX = function status (see #1047)
  5395.     AX = 0002h get status
  5396.         Return: AH = current operating mode (see #1044)
  5397.             AL = current connection status (see #1046)
  5398.     AX = 0003h suspend remote screen updates
  5399.         Return: AX = function status (see #1047)
  5400.     AX = 0004h resume screen updates
  5401.         Return: AX = function status (see #1047)
  5402.     AX = 0005h end current remote access session
  5403.         DS:SI -> termination request structure (see #1045)
  5404.         Return: AX = function status (see #1047)
  5405.     AX = 0006h remove pcANYWHERE IV from memory
  5406.         Return: AX = status (see #1047)
  5407.     AX = 8000h read data from communications channel
  5408.         DS:BX -> buffer
  5409.         CX = buffer size
  5410.         Return: AX >= number of characters read/available
  5411.             AX < 0 on error
  5412.     AX = 8001h write data to communications channel
  5413.         DS:BX -> buffer
  5414.         CX = buffer size
  5415.         Return: AX >= number of characters written
  5416.             AX < 0 on error
  5417.     AX = 8002h get connection status
  5418.         Return: AX = status
  5419.             > 0000h if connection active
  5420.             = 0000h if connection lost
  5421.             < 0000h on error
  5422.  
  5423. Format of pcANYWHERE initialization request structure:
  5424. Offset    Size    Description    (Table 1044)
  5425.  00h    BYTE    operating mode
  5426.         00h wait for a call
  5427.         01h hot key activates
  5428.         02h incoming call activates
  5429.         03h initiate a call
  5430.  01h  3 BYTEs    user ID to append to config file names
  5431.  04h    WORD    DS-relative pointer to path for config files
  5432.  06h    WORD    DS-relative pointer to path for program files
  5433.  
  5434. Format of pcANYWHERE termination request structure:
  5435. Offset    Size    Description    (Table 1045)
  5436.  00h    BYTE    operating mode after termination
  5437.         00h wait for a call
  5438.         01h hot key activates
  5439.         02h incoming call activates
  5440.         80h use current mode
  5441.         FFh remove from memory
  5442.  
  5443. Bitfields for current connection status:
  5444. Bit(s)    Description    (Table 1046)
  5445.  0    a physical connection is active
  5446.  1    remove screen updating is active
  5447.  2    connection checking is active
  5448.  3    hot key detection is active
  5449.  4    background file transfer is active
  5450.  
  5451. (Table 1047)
  5452. Values for pcANYWHERE function status:
  5453.  0000h    function completed successfully
  5454.  FFD1h    unable to release interrupt vectors
  5455.  FFD2h    unable to release allocated memory
  5456.  FFF2h    unable to establish a connection when operating mode is
  5457.       "Initiate a call"
  5458.  FFF3h    modem configuration is invalid (corrupt config)
  5459.  FFF4h    modem initialization failed (no modem response)
  5460.  FFF5h    the communications device could not be initialized
  5461.  FFF6h    the host operator aborted the function
  5462.  FFF7h    the communications driver type specified in the configuration file is
  5463.       different than the one loaded when pcANYWHERE IV was started
  5464.  FFF9h    the configuration file is invalid
  5465.  FFFAh    the configuration file could not be found
  5466.  FFFBh    no session is active
  5467.  FFFCh    a remote access session is active
  5468.  FFFDh    the specified operating mode is invalid
  5469. --------l-212B--CX5643-----------------------
  5470. INT 21 - Volkov Commander - INSTALLATION CHECK
  5471.     AH = 2Bh
  5472.     CX = 5643h ('VC')
  5473.     DX = 4F4Dh ('OM')
  5474.     AL = function number
  5475.         00h get left window data address
  5476.         01h get right window data address
  5477.         02h get address of general variables
  5478. Return: AL = 00h if Volkov Commander installed
  5479.         AH = version code (27h for v4.00.039)
  5480.         ES:BX -> requested data
  5481. Program: Volkov Commander is a Norton Commander-like DOS shell
  5482. --------G-212B--CX6269-----------------------
  5483. INT 21 - WDTSR.COM - INSTALLATION CHECK
  5484.     AH = 2Bh
  5485.     CX = 6269h ('bi')
  5486.     DX = 742Dh ('t-')
  5487. Return: AL = FFh if not installed
  5488.     AL = 77h ('w') if WDTSR is installed
  5489.         CX = 6174h ('at')
  5490.         DX = 6368h ('ch')
  5491.         ES = resident code segment
  5492.         ES:DI -> identification and configuration data
  5493. Program: WDTSR is a driver for the bitWatch watchdog hardware by bit-design
  5494.       GmbH
  5495. SeeAlso: AH=2Bh/CX=6269h"bitFOSSI",INT 14/AH=14h"FOSSIL",INT 15/AH=C3h
  5496. --------S-212B--CX6269-----------------------
  5497. INT 21 - bitFOSS - INSTALLATION CHECK
  5498.     AH = 2Bh
  5499.     CX = 6269h ('bi')
  5500.     DX = 7446h ('tF')
  5501. Return: AL = FFh if not installed
  5502.     AL = 4Fh ('O') if bitFOSS is installed
  5503.         CX = 5353h ('SS')
  5504.         DX = 494Ch ('IL')
  5505.         ES = resident code segment
  5506.         ES:DI -> identification data
  5507. Program: bitFOSS is a revision 5 FOSSIL driver
  5508. SeeAlso: AH=2Bh/CX=6269h"bitFOSSI",INT 11/AH=BCh
  5509. --------S-212B--CX6269-----------------------
  5510. INT 21 - bitFOSSI - INSTALLATION CHECK
  5511.     AH = 2Bh
  5512.     CX = 6269h ('bi')
  5513.     DX = 7449h ('tI')
  5514. Return: AL = FFh if not installed
  5515.     AL = 53h ('S') if bitFOSSI is installed
  5516.         CX = 444Eh ('DN')
  5517.         DX = 2D46h ('-F')
  5518.         ES = resident code segment
  5519.         ES:DI -> identification data
  5520. Program: bitFOSSI is a revision 5 FOSSIL driver for ???'s ISDN board
  5521. SeeAlso: AH=2Bh/CX=6269h"bitFOSS",INT 11/AH=BCh
  5522. --------D-212C-------------------------------
  5523. INT 21 - DOS 1+ - GET SYSTEM TIME
  5524.     AH = 2Ch
  5525. Return: CH = hour
  5526.     CL = minute
  5527.     DH = second
  5528.     DL = 1/100 seconds
  5529. Note:    on most systems, the resolution of the system clock is about 5/100sec,
  5530.       so returned times generally do not increment by 1
  5531.     on some systems, DL may always return 00h
  5532. SeeAlso: AH=2Ah,AH=2Dh,AH=E7h"Novell",INT 1A/AH=00h,INT 1A/AH=02h,INT 1A/AH=FEh
  5533. SeeAlso: INT 2F/AX=120Dh
  5534. --------v-212C--------------------------
  5535. INT 21 - VIRUS - "Anti Pode 2.0" - INSTALLATION CHECK
  5536.     AH = 2Ch
  5537. Return: DL = F2h if resident
  5538. SeeAlso: AX=1812h"VIRUS",AX=2C2Ch
  5539. --------v-212C00CX534B-----------------------
  5540. INT 21 - SKUDO - INSTALLATION CHECK
  5541.     AX = 2C00h
  5542.     CX = 534Bh ('SK')
  5543.     DX = 5544h ('UD')
  5544.     BX = 4F21h ('O!')
  5545. Return: AX = 5349h ('SI') if installed
  5546.         CH = version number
  5547.         CL = subversion
  5548. Program: SKUDO is an antivirus TSR by Jordi Mas
  5549. --------v-212C2C------------------------
  5550. INT 21 - VIRUS - "LockJaw/Proto-T" - INSTALLATION CHECK
  5551.     AX = 2C2Ch
  5552. Return: AX = 0DCDh if resident
  5553. SeeAlso: AH=2Ch"VIRUS",AX=3000h"VIRUS"
  5554. --------D-212D-------------------------------
  5555. INT 21 - DOS 1+ - SET SYSTEM TIME
  5556.     AH = 2Dh
  5557.     CH = hour
  5558.     CL = minute
  5559.     DH = second
  5560.     DL = 1/100 seconds
  5561. Return: AL = result
  5562.         00h successful
  5563.         FFh invalid time, system time unchanged
  5564. Note:    DOS 3.3+ also sets CMOS clock
  5565. SeeAlso: AH=2Bh"DOS",AH=2Ch,INT 1A/AH=01h,INT 1A/AH=03h,INT 1A/AH=FFh"AT&T"
  5566. --------T-212D01CX7820-----------------------
  5567. INT 21 - PC-Mix - INSTALLATION CHECK
  5568.     AX = 2D01h
  5569.     CX = 7820h ('X ')
  5570.     DX = 6D69h ('MI')
  5571. Return: AL = 00h if installed
  5572. --------D-212E--DL00-------------------------
  5573. INT 21 - DOS 1+ - SET VERIFY FLAG
  5574.     AH = 2Eh
  5575.     DL = 00h (DOS 1.x/2.x only)
  5576.     AL = new state of verify flag
  5577.         00h off
  5578.         01h on
  5579. Notes:    default state at system boot is OFF
  5580.     when ON, all disk writes are verified provided the device driver
  5581.       supports read-after-write verification
  5582. SeeAlso: AH=54h
  5583. --------D-212F-------------------------------
  5584. INT 21 - DOS 2+ - GET DISK TRANSFER AREA ADDRESS
  5585.     AH = 2Fh
  5586. Return: ES:BX -> current DTA
  5587. Note:    under the FlashTek X-32 DOS extender, the pointer is in ES:EBX
  5588. SeeAlso: AH=1Ah
  5589. --------D-2130-------------------------------
  5590. INT 21 - DOS 2+ - GET DOS VERSION
  5591.     AH = 30h
  5592. ---DOS 5+ ---
  5593.     AL = what to return in BH
  5594.         00h OEM number (as for DOS 2.0-4.0x)
  5595.         01h version flag
  5596. Return: AL = major version number (00h if DOS 1.x)
  5597.     AH = minor version number
  5598.     BL:CX = 24-bit user serial number (most versions do not use this)
  5599. ---if DOS <5 or AL=00h---
  5600.     BH = MS-DOS OEM number (see #1048)
  5601. ---if DOS 5+ and AL=01h---
  5602.     BH = version flag
  5603.         bit 3: DOS is in ROM
  5604.         other: reserved (0)
  5605. Notes:    the OS/2 v1.x Compatibility Box returns major version 0Ah (10)
  5606.     the OS/2 v2.x Compatibility Box returns major version 14h (20)
  5607.     OS/2 Warp 3.0 Virtual DOS Machines report v20.30; Warp 4 VDMs report
  5608.       v20.40.
  5609.     the WindowsNT DOS box returns version 5.00, subject to SETVER
  5610.     DOS 4.01 and 4.02 identify themselves as version 4.00; use
  5611.       INT 21/AH=87h to distinguish between the original European MS-DOS 4.0
  5612.       and the later PC-DOS 4.0x and MS-DOS 4.0x
  5613.     IBM DOS 6.1 reports its version as 6.00; use the OEM number to
  5614.       distinguish between MS-DOS 6.00 and IBM DOS 6.1 (there was never an
  5615.       IBM DOS 6.0)
  5616.     MS-DOS 6.21 reports its version as 6.20; version 6.22 returns the
  5617.       correct value
  5618.     Windows95 returns version 7.00 (the underlying MS-DOS), as did the
  5619.       "Chicago" beta (reported in _Microsoft_Systems_Journal_, August 1994)
  5620.     DR DOS 5.0 and 6.0 report version 3.31; Novell DOS 7 reports IBM v6.00,
  5621.       which some software displays as IBM DOS v6.10 (because of the version
  5622.       mismatch in true IBM DOS, as mentioned above)
  5623.     generic MS-DOS 3.30, Compaq MS-DOS 3.31, and others identify themselves
  5624.       as PC-DOS by returning OEM number 00h
  5625.     the version returned under DOS 4.0x may be modified by entries in
  5626.       the special program list (see #1314 at AH=52h); the version returned
  5627.       under DOS 5+ may be modified by SETVER--use AX=3306h to get the true
  5628.       version number
  5629. SeeAlso: AX=3000h/BX=3000h,AX=3306h,AX=4452h,AH=87h,INT 15/AX=4900h
  5630. SeeAlso: INT 2F/AX=122Fh,INT 2F/AX=4010h,INT 2F/AX=4A33h,INT 2F/AX=E002h
  5631.  
  5632. (Table 1048)
  5633. Values for DOS OEM number:
  5634.  00h    IBM
  5635.  01h    Compaq
  5636.  02h    MS Packaged Product
  5637.  04h    AT&T
  5638.  05h    ZDS (Zenith Electronics)
  5639.  06h    Hewlett-Packard
  5640.  07h    ZDS (Groupe Bull)
  5641.  0Dh    Packard-Bell
  5642.  16h    DEC
  5643.  23h    Olivetti
  5644.  28h    Texas Instruments
  5645.  29h    Toshiba
  5646.  33h    Novell (Windows/386 device IDs only)
  5647.  34h    MS Multimedia Systems (Windows/386 device IDs only)
  5648.  35h    MS Multimedia Systems (Windows/386 device IDs only)
  5649.  4Dh    Hewlett-Packard
  5650.  5Eh    RxDOS
  5651.  66h    PhysTechSoft (PTS-DOS)
  5652.  99h    General Software's Embedded DOS
  5653.  EEh    DR DOS
  5654.  EFh    Novell DOS
  5655.  FDh    FreeDOS
  5656.  FFh    Microsoft, Phoenix
  5657. --------E-2130-------------------------------
  5658. INT 21 - Phar Lap 386/DOS-Extender, Intel Code Builder - INSTALLATION CHECK
  5659.     AH = 30h
  5660.     EAX = 00003000h
  5661.     EBX = 50484152h ("PHAR")
  5662. Return: AL = major DOS version
  5663.     AH = minor DOS version
  5664.     EAX bits 31-16 = 4458h ('DX') if 386/DOS-extender installed
  5665.         BL = ASCII major version number
  5666.     EAX bits 31-16 = 4243h ('BC') if Intel Code Builder installed
  5667.         EDX = address of GDA
  5668. SeeAlso: AX=2501h,AX=FF00h,INT 2F/AX=F100h
  5669. --------v-2130--DXABCD-----------------------
  5670. INT 21 - VIRUS - "Possessed" - INSTALLATION CHECK
  5671.     AH = 30h
  5672.     DX = ABCDh
  5673. Return: DX = DCBAh if installed
  5674. SeeAlso: AX=0D20h,AH=30h/SI=1234h,AX=3000h"VIRUS",AX=30F1h
  5675. --------v-2130--SI1234---------------------
  5676. INT 21 - VIRUS - "ANDROMEDA-758" -INSTALLATION CHECK
  5677.     AH = 30h
  5678.     SI = 1234h
  5679. Return: AX = FFDDh if resident
  5680. SeeAlso: AH=30h/DX=ABCDh,AX=3000h"VIRUS"
  5681. --------T-213000BX1234-----------------------
  5682. INT 21 - CTask 2.0+ - INSTALLATION CHECK
  5683.     AX = 3000h
  5684.     BX = 1234h
  5685.     DS:DX -> 8-byte version string (DX < FFF0h) "CTask21",00h for v2.1-2.2
  5686. Return: AL = DOS major version
  5687.     AH = DOS minor version
  5688.     CX:BX -> Ctask global data block
  5689. Program: CTask is a multitasking kernel for C written by Thomas Wagner
  5690. Note:    if first eight bytes of returned data block equal eight bytes passed
  5691.       in, CTask is resident
  5692. --------O-213000BX3000-----------------------
  5693. INT 21 - PC-MOS/386 v3.0 - INSTALLATION CHECK/GET VERSION
  5694.     AX = 3000h
  5695.     BX = 3000h
  5696.     CX = DX = 3000h
  5697. Return: AX = PC-MOS version
  5698. Program: PC-MOS/386 is a multitasking/multiuser MS-DOS-compatible operating
  5699.       system by The Software Link, Inc.
  5700. SeeAlso: AH=30h,INT D4/AH=02h,INT D4/AH=10h
  5701. --------v-213000BX614A------------------
  5702. INT 21 - VIRUS - "Jackal" - INSTALLATION CHECK
  5703.     AX = 3000h
  5704.     BX = 614Ah ('aJ')
  5705.     CX = 6B63h ('kc')
  5706.     DX = 6C61h ('la')
  5707. Return: BX = ???
  5708. SeeAlso: AX=2C2Ch"VIRUS",AX=3030h"VIRUS"
  5709. --------G-213022-----------------------------
  5710. INT 21 - StopPrg v2.0 - INSTALLATION CHECK
  5711.     AX = 3022h
  5712. Return: AX = DOS version (see AH=30h)
  5713.     CX = 1112h if StopPrg installed
  5714.         BX = segment of resident code
  5715. Program: StopPrg is a resident program aborter by MAK-TRAXON's Prophet
  5716. Note:    StopPrg may be temporarily disabled by storing 9090h in the word at
  5717.       0000h:04FEh
  5718. --------v-213030BX694D-----------------------
  5719. INT 21 - VIRUS - "IMTC" -INSTALLATION CHECK
  5720.     AX = 3030h
  5721.     BX = 694Dh
  5722. Return: DX = 7443h if resident
  5723. SeeAlso: AX=3000h/BX=614Ah"VIRUS",AX=3032h"VIRUS"
  5724. --------v-213032DX1234-----------------------
  5725. INT 21 - VIRUS - "Uruguay" - INSTALLATION CHECK
  5726.     AX = 3032h
  5727.     DX = 1234h
  5728. Return: AX = 5678h if resident
  5729. SeeAlso: AX=3030h"VIRUS",AX=30F1h"VIRUS"
  5730. --------v-2130F1-----------------------------
  5731. INT 21 - VIRUS - "Dutch-555"/"Quit 1992" - INSTALLATION CHECK
  5732.     AX = 30F1h
  5733. Return: AL = 00h if resident
  5734. SeeAlso: AH=30h/DX=ABCDh,AX=3032h,AX=330Fh,AX=33DAh
  5735. ----------2130FFCX4445-----------------------
  5736. INT 21 - DESQ??? - INSTALLATION CHECK
  5737.     AX = 30FFh
  5738.     CX = 4445h ("DE")
  5739.     DX = 5351h ("SQ")
  5740. Return: BH = 05h if installed
  5741.     ???
  5742. Note:    called by DUBLDISK.COM v2.6; this function is not supported by
  5743.       DESQview, so it may be for DESQview's precursor DESQ.
  5744. SeeAlso: AX=4404h"DUBLDISK"
  5745. --------D-2131-------------------------------
  5746. INT 21 - DOS 2+ - TERMINATE AND STAY RESIDENT
  5747.     AH = 31h
  5748.     AL = return code
  5749.     DX = number of paragraphs to keep resident
  5750. Return: never
  5751. Notes:    the value in DX only affects the memory block containing the PSP;
  5752.       additional memory allocated via AH=48h is not affected
  5753.     the minimum number of paragraphs which will remain resident is 11h
  5754.       for DOS 2.x and 06h for DOS 3.0+
  5755.     most TSRs can save some memory by releasing their environment block
  5756.       before terminating (see #1032 at AH=26h,AH=49h)
  5757.     any open files remain open, so one should close any files which will
  5758.       not be used before going resident; to access a file which is left
  5759.       open from the TSR, one must switch PSP segments first (see AH=50h)
  5760. SeeAlso: AH=00h,AH=4Ch,AH=4Dh,INT 20,INT 22,INT 27
  5761. --------D-2132-------------------------------
  5762. INT 21 - DOS 2+ - GET DOS DRIVE PARAMETER BLOCK FOR SPECIFIC DRIVE
  5763.     AH = 32h
  5764.     DL = drive number (00h = default, 01h = A:, etc)
  5765. Return: AL = status
  5766.         00h successful
  5767.         DS:BX -> Drive Parameter Block (DPB) (see #1049) for specified
  5768.               drive
  5769.         FFh invalid or network drive
  5770. Notes:    the OS/2 compatibility box supports the DOS 3.3 version of this call
  5771.       except for the DWORD at offset 12h
  5772.     this call updates the DPB by reading the disk; the DPB may be accessed
  5773.       via the DOS list of lists (see #1279 at AH=52h) if disk access is not
  5774.       desirable.
  5775.     undocumented prior to the release of DOS 5.0; only the DOS 4.0+
  5776.       version of the DPB has been documented, however
  5777.     supported by DR DOS 3.41+; DR DOS 3.41-6.0 return the same data as
  5778.       MS-DOS 3.31
  5779.     IBM ROM-DOS v4.0 also reports invalid/network (AL=FFh) on the ROM drive
  5780. SeeAlso: AH=1Fh,AH=52h,AX=7302h
  5781.  
  5782. Format of DOS Drive Parameter Block:
  5783. Offset    Size    Description    (Table 1049)
  5784.  00h    BYTE    drive number (00h = A:, 01h = B:, etc)
  5785.  01h    BYTE    unit number within device driver
  5786.  02h    WORD    bytes per sector
  5787.  04h    BYTE    highest sector number within a cluster
  5788.  05h    BYTE    shift count to convert clusters into sectors
  5789.  06h    WORD    number of reserved sectors at beginning of drive
  5790.  08h    BYTE    number of FATs
  5791.  09h    WORD    number of root directory entries
  5792.  0Bh    WORD    number of first sector containing user data
  5793.  0Dh    WORD    highest cluster number (number of data clusters + 1)
  5794.         16-bit FAT if greater than 0FF6h, else 12-bit FAT
  5795.  0Fh    BYTE    number of sectors per FAT
  5796.  10h    WORD    sector number of first directory sector
  5797.  12h    DWORD    address of device driver header (see #1298)
  5798.  16h    BYTE    media ID byte (see #1010)
  5799.  17h    BYTE    00h if disk accessed, FFh if not
  5800.  18h    DWORD    pointer to next DPB
  5801. ---DOS 2.x---
  5802.  1Ch    WORD    cluster containing start of current directory, 0000h=root,
  5803.         FFFFh = unknown
  5804.  1Eh 64 BYTEs    ASCIZ pathname of current directory for drive
  5805. ---DOS 3.x---
  5806.  1Ch    WORD    cluster at which to start search for free space when writing
  5807.  1Eh    WORD    number of free clusters on drive, FFFFh = unknown
  5808. ---DOS 4.0-6.0---
  5809.  0Fh    WORD    number of sectors per FAT
  5810.  11h    WORD    sector number of first directory sector
  5811.  13h    DWORD    address of device driver header (see #1298)
  5812.  17h    BYTE    media ID byte (see #1010)
  5813.  18h    BYTE    00h if disk accessed, FFh if not
  5814.  19h    DWORD    pointer to next DPB
  5815.  1Dh    WORD    cluster at which to start search for free space when writing,
  5816.         usually the last cluster allocated
  5817.  1Fh    WORD    number of free clusters on drive, FFFFh = unknown
  5818. SeeAlso: #1315,#1440 at AX=7302h
  5819. --------D-2133-------------------------------
  5820. INT 21 - DOS 2+ - EXTENDED BREAK CHECKING
  5821.     AH = 33h
  5822.     AL = subfunction
  5823.         00h get current extended break state
  5824.         Return: DL = current state, 00h = off, 01h = on
  5825.         01h set state of extended ^C/^Break checking
  5826.         DL = new state
  5827.             00h off, check only on character I/O functions
  5828.             01h on, check on all DOS functions
  5829.         Return: (Novell DOS 7) DL = old state of extended Break checks
  5830. Note:    under DOS 3.1+ and DR DOS, this function does not use any of the
  5831.       DOS-internal stacks and may thus be called at any time
  5832. SeeAlso: AX=3302h
  5833. --------D-213302-----------------------------
  5834. INT 21 - DOS 3.x+ internal - GET AND SET EXTENDED CONTROL-BREAK CHECKING STATE
  5835.     AX = 3302h
  5836.     DL = new state (00h for OFF, 01h for ON)
  5837. Return: DL = old state of extended BREAK checking
  5838. Notes:    this function does not use any of the DOS-internal stacks and may thus
  5839.       be called at any time; one possible use is modifying Control-Break
  5840.       checking from within an interrupt handler or TSR
  5841.     not supported by DR DOS through version 6.0 (error code 01h);
  5842.       newly-supported by Novell DOS 7
  5843. SeeAlso: AH=33h
  5844. --------D-213303-----------------------------
  5845. INT 21 - DOS 4.0+ - UNUSED
  5846.     AX = 3303h
  5847. Return: nothing
  5848. Note:    this function and AX=3304h were intended to support a proposed
  5849.       code-page switching flag (using two of the ten reserved bytes in
  5850.       the DOS directory entry for codepage information); however, this
  5851.       function has always been a NOP in public releases of DOS and OS/2.
  5852.       See _DOS_Internals_ Chapter 2 for more information
  5853. SeeAlso: AX=3304h
  5854. --------D-213304-----------------------------
  5855. INT 21 - DOS 4.0+ - UNUSED
  5856.     AX = 3304h
  5857. Return: nothing
  5858. Note:    this function and AX=3303h were intended to support a proposed
  5859.       code-page switching flag (using two of the ten reserved bytes in
  5860.       the DOS directory entry for codepage information); however, this
  5861.       function has always been a NOP in public releases of DOS and OS/2.
  5862.       See _DOS_Internals_ Chapter 2 for more information
  5863. SeeAlso: AX=3303h
  5864. --------D-213305-----------------------------
  5865. INT 21 - DOS 4.0+ - GET BOOT DRIVE
  5866.     AX = 3305h
  5867. Return: DL = boot drive (1=A:,...)
  5868. Notes:    fully reentrant
  5869.     NEC 9800-series PCs always call the boot drive A: and assign the other
  5870.       drive letters sequentially to the other drives in the system
  5871.     this call is supported by OS/2 Warp 3.0, but not earlier versions of
  5872.       OS/2; it is also supported by Novell DOS 7
  5873. --------D-213306-----------------------------
  5874. INT 21 - DOS 5+ - GET TRUE VERSION NUMBER
  5875.     AX = 3306h
  5876. Return: BL = major version
  5877.     BH = minor version
  5878.     DL = revision (bits 2-0, all others 0)
  5879.     DH = version flags
  5880.         bit 3: DOS is in ROM
  5881.         bit 4: DOS is in HMA
  5882.     AL = FFh if true DOS version < 5.0
  5883. Notes:    this function always returns the true version number, unlike AH=30h,
  5884.       whose return value may be changed with SETVER
  5885.     because of the conflict from the CBIS redirector (see next
  5886.       entry), programs should check whether BH is less than 100 (64h)
  5887.       and BL is at least 5 before accepting the returned BX as the true
  5888.       version number; however, even this is not entirely reliable when
  5889.       that redirector is loaded
  5890.     fully reentrant
  5891.     OS/2 v2.1 will return BX=0A14h (version 20.10)
  5892.     the Windows NT DOS box returns BX=3205h (version 5.50)
  5893.     Novell DOS 7 returns IBM v6.00, which some software displays as
  5894.       IBM DOS v6.10 (because of the version mismatch in true IBM DOS
  5895.       mentioned for INT 21/AH=30h); versions through Update 15 all
  5896.       return revision code 00h
  5897. BUG:    DR DOS 5.0 and 6.0 return CF set/AX=0001h for INT 21/AH=33h
  5898.       subfunctions other than 00h-02h and 05h, while MS-DOS returns AL=FFh
  5899.       for invalid subfunctions
  5900. SeeAlso: AH=30h,INT 2F/AX=122Fh,INT 2F/AX=E000h"SETDRVER"
  5901. --------N-213306-----------------------------
  5902. INT 21 - CBIS network - NETWORK REDIRECTOR - ???
  5903.     AX = 3306h
  5904. Return: AX = 3306h
  5905.     BL = ??? (usually 00h)
  5906.     BH = ??? (usually 00h or FFh)
  5907. Note:    unknown function, is in conflict with DOS 5+ version call
  5908. SeeAlso: AX=3306h"DOS"
  5909. --------v-21330F-----------------------------
  5910. INT 21 - VIRUS - "Burghofer" - INSTALLATION CHECK
  5911.     AX = 330Fh
  5912. Return: AL = 0Fh if resident (DOS returns AL=FFh)
  5913. SeeAlso: AX=30F1h,AX=33DAh,AX=33E0h
  5914. --------k-213341-----------------------------
  5915. INT 21 - Diet Disk v1.0 - INSTALLATION CHECK
  5916.     AX = 3341h
  5917. Return: DX = 1234h if installed
  5918.         CX = resident code segment
  5919. Program: Diet Disk is a public domain transparent data file compressor by
  5920.       Barry Nance
  5921. --------v-2133DA------------------------
  5922. INT 21 - VIRUS - "CoffeeShop" - INSTALLATION CHECK
  5923.     AX = 33DAh
  5924. Return: AH = A5h if resident
  5925.         AL = virus version
  5926. SeeAlso: AX=330Fh,AX=33E0h,AX=5643h"VIRUS"
  5927. --------v-2133E0-----------------------------
  5928. INT 21 - VIRUS - "Oropax" - INSTALLATION CHECK
  5929.     AX = 33E0h
  5930. Return: AL = E0h if resident (DOS returns AL=FFh)
  5931. SeeAlso: AX=330Fh,AX=33DAh,AX=357Fh
  5932. --------D-2134-------------------------------
  5933. INT 21 - DOS 2+ - GET ADDRESS OF INDOS FLAG
  5934.     AH = 34h
  5935. Return: ES:BX -> one-byte InDOS flag
  5936. Notes:    this function executes on the DOS stack, and thus cannot be called
  5937.       while another DOS function is already executing; you should use
  5938.       this function once at the beginning of the program and store the
  5939.       returned pointer rather than calling it when requiring DOS access
  5940.     the value of InDOS is incremented whenever an INT 21 function begins
  5941.       and decremented whenever one completes
  5942.     during an INT 28 call, it is safe to call some INT 21 functions even
  5943.       though InDOS may be 01h instead of zero
  5944.     InDOS alone is not sufficient for determining when it is safe to
  5945.       enter DOS, as the critical error handling decrements InDOS and
  5946.       increments the critical error flag for the duration of the critical
  5947.       error.  Thus, it is possible for InDOS to be zero even if DOS is
  5948.       busy.
  5949.     SMARTDRV 4.0 sets the InDOS flag while flushing its buffers to disk,
  5950.       then zeros it on completion
  5951.     the critical error flag is the byte immediately following InDOS in
  5952.       DOS 2.x, and the byte BEFORE the InDOS flag in DOS 3.0+ and
  5953.       DR DOS 3.41+ (except COMPAQ DOS 3.0, where the critical error flag
  5954.       is located 1AAh bytes BEFORE the critical section flag)
  5955.     for DOS 3.1+, an undocumented call exists to get the address of the
  5956.       critical error flag (see AX=5D06h)
  5957.     this function was undocumented prior to the release of DOS 5.0.
  5958. SeeAlso: AX=5D06h,AX=5D0Bh,INT 15/AX=DE1Fh,INT 28
  5959. --------D-2135-------------------------------
  5960. INT 21 - DOS 2+ - GET INTERRUPT VECTOR
  5961.     AH = 35h
  5962.     AL = interrupt number
  5963. Return: ES:BX -> current interrupt handler
  5964. Note:    under DR DOS 5.0+, this function does not use any of the DOS-internal
  5965.       stacks and may thus be called at any time
  5966. SeeAlso: AH=25h,AX=2503h
  5967. --------E-213501-----------------------------
  5968. INT 21 P - FlashTek X-32VM - ALLOCATE PROTECTED-MODE SELECTOR
  5969.     AX = 3501h
  5970. Return: CF clear if successful
  5971.         BX = new selector
  5972.     CF set on error (no more selectors available)
  5973. Note:    the new selector will be an expand-up read/write data selector with
  5974.       undefined base and limit
  5975. SeeAlso: AX=3502h,INT 31/AX=0000h
  5976. --------E-213502-----------------------------
  5977. INT 21 P - FlashTek X-32VM - DEALLOCATE PROTECTED-MODE SELECTOR
  5978.     AX = 3502h
  5979.     BX = selector
  5980. Return: CF clear if successful
  5981.     CF set on error (invalid selector)
  5982. Note:    only selectors allocated via AX=3501h should be deallocated
  5983. SeeAlso: AX=3501h,INT 31/AX=0001h
  5984. --------E-213503-----------------------------
  5985. INT 21 P - FlashTek X-32VM - SET SELECTOR BASE ADDRESS
  5986.     AX = 3503h
  5987.     BX = selector
  5988.     ECX = base address
  5989. Return: CF clear if successful
  5990.     CF set on error (invalid selector)
  5991. SeeAlso: AX=3504h,AX=3505h,INT 31/AX=0007h
  5992. --------E-213504-----------------------------
  5993. INT 21 P - FlashTek X-32VM - GET SELECTOR BASE ADDRESS
  5994.     AX = 3504h
  5995.     BX = selector
  5996. Return: CF clear if successful
  5997.         ECX = absolute base address of selector
  5998.     CF set on error (invalid selector)
  5999. SeeAlso: AX=3503h,INT 31/AX=0006h
  6000. --------E-213505-----------------------------
  6001. INT 21 P - FlashTek X-32VM - SET SELECTOR LIMIT
  6002.     AX = 3505h
  6003.     BX = selector
  6004.     ECX = desired limit
  6005. Return: CF clear if successful
  6006.         ECX = actual limit set
  6007.     CF set on error (no more selectors available)
  6008. Note:    the limit will be rounded down to nearest 4K boundary if the requested
  6009.       limit is greater than 1MB
  6010. SeeAlso: AX=3503h,INT 31/AX=0008h
  6011. --------E-21350A-----------------------------
  6012. INT 21 P - FlashTek X-32VM - PHYSICAL ADDRESS MAPPING
  6013.     AX = 350Ah
  6014.     EBX = absolute physical address
  6015.     ECX = size in bytes of area to map
  6016. Return: CF clear if successful
  6017.     CF set on error (insufficient memory or service refused by DPMI host)
  6018. Notes:    should not make repeated calls for the same physical address
  6019.     there is no provision for unmapping memory
  6020. --------E-21350B-----------------------------
  6021. INT 21 P - FlashTek X-32VM - UPDATE AND RETURN AVAILABLE FREE MEMORY
  6022.     AX = 350Bh
  6023.     DS = default selector for DS
  6024. Return: CF clear
  6025.     EAX = maximum amount of memory which can be allocated via AX=350Ch
  6026. SeeAlso: AX=350Ch
  6027. --------E-21350C-----------------------------
  6028. INT 21 P - FlashTek X-32VM - ALLOCATE A BLOCK OF MEMORY
  6029.     AX = 350Ch
  6030.     ECX = size of block in bytes
  6031.     DS = default DS
  6032. Return: CF clear if successful
  6033.         EAX = near pointer to new block
  6034.         EDX = new lowest legal value for stack
  6035.     CF set on error (requested size not multiple of 4K)
  6036. SeeAlso: AX=350Bh,AX=350Dh
  6037. --------E-21350D-----------------------------
  6038. INT 21 P - FlashTek X-32VM - RESERVE BLOCK OF MEMORY FOR 32-BIT STACK
  6039.     AX = 350Dh
  6040.     EBX = current ESP value
  6041.     ECX = size of block in bytes
  6042.     DS = default DS
  6043. Return: CF clear if successful
  6044.         EBX = new value for ESP
  6045.         EDX = suggested new limit for SS
  6046.     CF set on error
  6047. Note:    this function should only be called once during initialization
  6048. SeeAlso: AX=350Bh,AX=350Ch
  6049. --------v-21357F-----------------------------
  6050. INT 21 - VIRUS - "Agiplan"/"Month 4-6" - INSTALLATION CHECK
  6051.     AX = 357Fh
  6052. Return: DX = FFFFh if installed
  6053. SeeAlso: AX=33E0h,AX=3DFFh
  6054. --------D-2136-------------------------------
  6055. INT 21 - DOS 2+ - GET FREE DISK SPACE
  6056.     AH = 36h
  6057.     DL = drive number (00h = default, 01h = A:, etc)
  6058. Return: AX = FFFFh if invalid drive
  6059.     else
  6060.         AX = sectors per cluster
  6061.         BX = number of free clusters
  6062.         CX = bytes per sector
  6063.         DX = total clusters on drive
  6064. Notes:    free space on drive in bytes is AX * BX * CX
  6065.     total space on drive in bytes is AX * CX * DX
  6066.     "lost clusters" are considered to be in use
  6067.     according to Dave Williams' MS-DOS reference, the value in DX is
  6068.       incorrect for non-default drives after ASSIGN is run
  6069.     this function does not return proper results on CD-ROMs;
  6070.       use AX=4402h"CD-ROM" instead
  6071.     (FAT32 drive) the reported total and free space are limited to 2G-32K
  6072.       should they exceed that value
  6073. SeeAlso: AH=1Bh,AH=1Ch,AX=4402h"CD-ROM",AX=7303h
  6074. --------D-213700-----------------------------
  6075. INT 21 - DOS 2+ - "SWITCHAR" - GET SWITCH CHARACTER
  6076.     AX = 3700h
  6077. Return: AL = status
  6078.         00h successful
  6079.         DL = current switch character
  6080.         FFh unsupported subfunction
  6081. Desc:    Determine the character which is used to introduce command switches.
  6082.       This setting is ignored by MS-DOS commands in version 4.0 and higher,
  6083.       but is honored by many third-party programs and by Novell DOS 7
  6084.       external commands
  6085. BUG:    Novell DOS 7's COMMAND.COM fails to honor the SwitChar setting for
  6086.       internal commands even though COMMAND.COM honors it in its own
  6087.       command tail (i.e. COMMAND /?)
  6088. Notes:    documented in some OEM versions of some releases of DOS
  6089.     supported by OS/2 compatibility box
  6090.     always returns AL=00h/DL=2Fh for MS-DOS 5+ and DR DOS 3.41-6.0
  6091.     Novell DOS 7 COMMAND.COM indicates switch characters other than '/'
  6092.       by changing the first backslash (and only the first one) in the
  6093.       path it prints for PROMPT $p with a forward slash
  6094. SeeAlso: AX=3701h
  6095. --------D-213701-----------------------------
  6096. INT 21 - DOS 2+ - "SWITCHAR" - SET SWITCH CHARACTER
  6097.     AX = 3701h
  6098.     DL = new switch character
  6099. Return: AL = status
  6100.         00h successful
  6101.         FFh unsupported subfunction
  6102. Notes:    documented in some OEM versions of some releases of DOS
  6103.     supported by OS/2 compatibility box and Novell DOS 7
  6104.     ignored by MS-DOS 5+ and DR DOS 3.41-6.0; DR DOS 6.0 and Novell DOS 7
  6105.       leave AX unchanged
  6106. SeeAlso: AX=3700h
  6107. --------D-2137-------------------------------
  6108. INT 21 - DOS 2.x and 3.3+ only - "AVAILDEV" - SPECIFY \DEV\ PREFIX USE
  6109.     AH = 37h
  6110.     AL = subfunction
  6111.         02h get availdev flag
  6112.         Return: DL = 00h \DEV\ must precede character device names
  6113.                = nonzero \DEV\ is optional
  6114.         03h set availdev flag
  6115.         DL = new state
  6116.             00h        \DEV\ is mandatory
  6117.             nonzero    \DEV\ is optional
  6118. Return: AL = status
  6119.         00h successful
  6120.         FFh unsupported subfunction
  6121. Notes:    all versions of DOS from 2.00 allow \DEV\ to be prepended to device
  6122.       names without generating an error even if the directory \DEV does
  6123.       not actually exist (other paths generate an error if they do not
  6124.       exist).
  6125.     although MS-DOS 3.3+, DR DOS 3.41+, and Novell DOS 7 accept these
  6126.       calls, they have no effect, and AL=02h always returns DL=FFh (except
  6127.       for Novell DOS 7, which leaves AX unchanged for both subfunctions)
  6128. --------k-2137A0BX6A6D-----------------------
  6129. INT 21 - XPACK v1.52+ - TSR INSTALLATION CHECK
  6130.     AX = 37A0h
  6131.     BX = 6A6Dh ('jm')
  6132. Return: AL = FFh if not present as TSR (default return value from DOS)
  6133.     AX = 0000h if installed as a TSR
  6134.         CX = 6A6Dh ('jm')
  6135.         DX = version ID (0152h)
  6136. Program: XPACK is a transparent file compressor/decompressor by JauMing Tseng
  6137. SeeAlso: AX=37A1h/BX=6A6Dh,AX=37A3h/BX=6A6Dh
  6138. --------k-2137A1BX6A6D-----------------------
  6139. INT 21 - XPACK v1.52+ - UNINSTALL
  6140.     AX = 37A1h
  6141.     BX = 6A6Dh ('jm')
  6142. Return: AX = status
  6143.         0000h successful
  6144.         FFFFh failed
  6145. Program: XPACK is a transparent file compressor/decompressor by JauMing Tseng
  6146. SeeAlso: AX=37A0h/BX=6A6Dh
  6147. --------k-2137A2BX6A6D-----------------------
  6148. INT 21 - XPACK v1.52+ - GET TSR STATUS
  6149.     AX = 37A2h
  6150.     BX = 6A6Dh ('jm')
  6151. Return: AX = 0000h (successful)
  6152.     DL = status (01h active, 00h disabled)
  6153. SeeAlso: AX=37A3h/BX=6A6Dh
  6154. --------k-2137A3BX6A6D-----------------------
  6155. INT 21 - XPACK v1.52+ - SET TSR STATUS
  6156.     AX = 37A3h
  6157.     BX = 6A6Dh ('jm')
  6158.     DL = status (01h active, 00h disabled)
  6159. Return: AX = 0000h (successful)
  6160. SeeAlso: AX=37A0h/BX=6A6Dh,AX=37A2h/BX=6A6Dh
  6161. ----------2137A6BX6A6D-----------------------
  6162. INT 21 - XPACK v1.65 - GET TEMPORARY DIRECTORY NAME
  6163.     AX = 37A6h
  6164.     BX = 6A6Dh ('jm')
  6165. Return: AX = 0000h
  6166.     DS:DX -> name of temporary directory
  6167. Program: XPACK is a transparent file compressor/decompressor by JauMing Tseng
  6168. SeeAlso: AX=37A0h/BX=6A6Dh,AX=37A7h/BX=6A6Dh
  6169. ----------2137A7BX6A6D-----------------------
  6170. INT 21 - XPACK v1.65 - SET TEMPORARY DIRECTORY NAME
  6171.     AX = 37A7h
  6172.     BX = 6A6Dh ('jm')
  6173.     DS:DX -> ASCIZ name of temporary directory (max 64 chars)
  6174. Return: AX = 0000h
  6175. Note:    the specified directory name must include a drive letter and end with
  6176.       a backslash (e.g. 'c:\dos\',0)
  6177. SeeAlso: AX=37A0h/BX=6A6Dh,AX=37A6h/BX=6A6Dh
  6178. --------k-2137D0BX899D-----------------------
  6179. INT 21 - DIET v1.43e - TSR INSTALLATION CHECK
  6180.     AX = 37D0h
  6181.     BX = 899Dh ('DI' + 'ET')
  6182. Return: AL = FFh if not present as TSR (default return value from DOS)
  6183.     AX = 0000h if installed as a TSR
  6184.         CX = 899Dh
  6185.         DX = version ID
  6186. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  6187. SeeAlso: AX=37D1h,AX=37D2h,AX=37D4h,AX=37D6h,AX=37DFh,AX=4BF0h,AX=4BF1h
  6188. --------k-2137D1BX899D-----------------------
  6189. INT 21 - DIET v1.43e - GET DIET.EXE RESIDENT SEGMENT
  6190.     AX = 37D1h
  6191.     BX = 899Dh ('DI' + 'ET')
  6192. Return: AX = 0000h
  6193.     CX = code segment of TSR part of DIET.EXE
  6194.     DX = memory block segment of TSR DIET.EXE
  6195.         (0000h if installed as device driver)
  6196. SeeAlso: AX=37D0h,AX=37DFh
  6197. --------k-2137D2BX899D-----------------------
  6198. INT 21 - DIET v1.43e - GET TSR CONTROL FLAGS
  6199.     AX = 37D2h
  6200.     BX = 899Dh ('DI' + 'ET')
  6201. Return: AX = 0000h
  6202.     DL = control flag (00h active, else disabled)
  6203.     DH = skip flag (nonzero while TSR active)
  6204. SeeAlso: AX=37D0h,AX=37D3h,AX=37D4h
  6205. --------k-2137D3BX899D-----------------------
  6206. INT 21 - DIET v1.43e - SET TSR CONTROL FLAGS
  6207.     AX = 37D3h
  6208.     BX = 899Dh ('DI' + 'ET')
  6209.     DL = control flag (00h active, else disabled)
  6210.     DH = skip flag (00h)
  6211. Return: AX = 0000h
  6212. SeeAlso: AX=37D0h,AX=37D2h,AX=37D5h
  6213. --------k-2137D4BX899D-----------------------
  6214. INT 21 - DIET v1.43e - GET TSR OPTIONS
  6215.     AX = 37D4h
  6216.     BX = 899Dh ('DI' + 'ET')
  6217. Return: AX = 0000h
  6218.     DX = TSR options (see #1050)
  6219. SeeAlso: AX=37D0h,AX=37D2h,AX=37D5h
  6220.  
  6221. Bitfields for DIET TSR options:
  6222. Bit(s)    Description    (Table 1050)
  6223.  0    automated compression of DIETed file
  6224.  1    automated compression of newly-created file
  6225.  2    suppress DIET message
  6226.  3    display original file size
  6227.  4-15    reserved (0)
  6228. --------k-2137D5BX899D-----------------------
  6229. INT 21 - DIET v1.43e - SET TSR OPTIONS
  6230.     AX = 37D5h
  6231.     BX = 899Dh ('DI' + 'ET')
  6232.     DX = TSR options (see #1050)
  6233. Return: AX = 0000h
  6234. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  6235. SeeAlso: AX=37D0h,AX=37D3h,AX=37D4h
  6236. --------k-2137D6BX899D-----------------------
  6237. INT 21 - DIET v1.43e - GET TEMPORARY DIRECTORY NAMES
  6238.     AX = 37D6h
  6239.     BX = 899Dh ('DI' + 'ET')
  6240. Return: AX = 0000h
  6241.     DS:DX -> name of temporary directory or 0000h:0000h for current dir
  6242. SeeAlso: AX=37D0h,AX=37D7h
  6243. --------k-2137D7BX899D-----------------------
  6244. INT 21 - DIET v1.43e - SET TEMPORARY DIRECTORY NAMES
  6245.     AX = 37D7h
  6246.     BX = 899Dh ('DI' + 'ET')
  6247.     DS:DX -> ASCIZ name of temporary directory (max 61 chars)
  6248.         0000h:0000h for current directory
  6249. Return: AX = 0000h
  6250. Note:    the specified directory name must include a drive letter and end with
  6251.       a backslash
  6252. SeeAlso: AX=37D0h,AX=37D6h
  6253. --------k-2137DCBX899D-----------------------
  6254. INT 21 - DIET v1.43e - SET ADDRESS OF EXTERNAL PROCEDURE
  6255.     AX = 37DCh
  6256.     BX = 899Dh ('DI' + 'ET')
  6257.     DS:DX -> external procedure (see #1051)
  6258. Return: AX = 0000h
  6259. Note:    the resident code will call the specified external procedure at the
  6260.       beginning of decompression and when compression is exited on failure
  6261. SeeAlso: AX=37DDh
  6262.  
  6263. (Table 1051)
  6264. Values DIET external procedure is called with:
  6265.     STACK:    WORD    class
  6266.             FFFDh creation failed for unknown reasons
  6267.             FFFEh creation failed due to lack of space
  6268.             FFFFh file creation error
  6269.             else file handle of DIETed file to be decompressed
  6270.         DWORD    -> compressed filename
  6271.         DWORD    -> decompressed or temporary filename
  6272. Return: SI,DI,BP,DS,ES must be preserved by external procedure
  6273. --------k-2137DDBX899D-----------------------
  6274. INT 21 - DIET v1.43e - RELEASE EXTERNAL PROCEDURE
  6275.     AX = 37DDh
  6276.     BX = 899Dh ('DI' + 'ET')
  6277. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  6278. Note:    unlinks the external procedure specified by AX=37DCh
  6279. SeeAlso: AX=37DCh
  6280. --------k-2137DEBX899D-----------------------
  6281. INT 21 - DIET v1.43e - READ EMS STATUS
  6282.     AX = 37DEh
  6283.     BX = 899Dh ('DI' + 'ET')
  6284. Return: AX = 0000h
  6285.     CX = EMS status
  6286.         0000h not used
  6287.         0001h used as work area
  6288.         0002h used for code and as work area
  6289.     DX = EMM handle when EMS is in use
  6290. --------k-2137DFBX899D-----------------------
  6291. INT 21 - DIET v1.43e - UNINSTALL TSR
  6292.     AX = 37DFh
  6293.     BX = 899Dh ('DI' + 'ET')
  6294. Return: AX = status
  6295.         0000h successful
  6296.         00FFh failed
  6297. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  6298. SeeAlso: AX=37D0h
  6299. Index:    uninstall;DIET
  6300. --------D-2138-------------------------------
  6301. INT 21 - DOS 2+ - GET COUNTRY-SPECIFIC INFORMATION
  6302.     AH = 38h
  6303. --DOS 2.x--
  6304.     AL = 00h get current-country info
  6305.     DS:DX -> buffer for returned info (see #1052,#1053)
  6306. Return: CF set on error
  6307.         AX = error code (02h)
  6308.     CF clear if successful
  6309.         AX = country code (MS-DOS 2.11 only)
  6310.         buffer at DS:DX filled
  6311. --DOS 3.0+--
  6312.     AL = 00h for current country
  6313.     AL = 01h thru 0FEh for specific country with code <255 (see #1054)
  6314.     AL = 0FFh for specific country with code >= 255
  6315.        BX = 16-bit country code (see #1054)
  6316.     DS:DX -> buffer for returned info (see #1053)
  6317. Return: CF set on error
  6318.         AX = error code (02h)
  6319.     CF clear if successful
  6320.         AX = country code (Novell NWDOS v7.0)
  6321.         BX = country code
  6322.         DS:DX buffer filled
  6323. Note:    this function is not supported by the Borland DPMI host, but no error
  6324.       is returned; as a workaround, one should allocate a buffer in
  6325.       conventional memory with INT 31/AX=0100h and simulate an INT 21 with
  6326.       INT 31/AX=0300h
  6327. SeeAlso: AH=65h,INT 10/AX=5001h,INT 2F/AX=110Ch,INT 2F/AX=1404h
  6328.  
  6329. Format of DOS 2.00-2.10 country info:
  6330. Offset    Size    Description    (Table 1052)
  6331.  00h    WORD    date format  0 = USA    mm dd yy
  6332.                  1 = Europe dd mm yy
  6333.                  2 = Japan    yy mm dd
  6334.  02h    BYTE    currency symbol
  6335.  03h    BYTE    00h
  6336.  04h    BYTE    thousands separator char
  6337.  05h    BYTE    00h
  6338.  06h    BYTE    decimal separator char
  6339.  07h    BYTE    00h
  6340.  08h 24 BYTEs    reserved
  6341.  
  6342. Format of DOS 2.11+ country info:
  6343. Offset    Size    Description    (Table 1053)
  6344.  00h    WORD    date format (see #1052)
  6345.  02h  5 BYTEs    ASCIZ currency symbol string
  6346.  07h  2 BYTEs    ASCIZ thousands separator
  6347.  09h  2 BYTEs    ASCIZ decimal separator
  6348.  0Bh  2 BYTEs    ASCIZ date separator
  6349.  0Dh  2 BYTEs    ASCIZ time separator
  6350.  0Fh    BYTE    currency format
  6351.         bit 2 = set if currency symbol replaces decimal point
  6352.         bit 1 = number of spaces between value and currency symbol
  6353.         bit 0 = 0 if currency symbol precedes value
  6354.             1 if currency symbol follows value
  6355.  10h    BYTE    number of digits after decimal in currency
  6356.  11h    BYTE    time format
  6357.         bit 0 = 0 if 12-hour clock
  6358.             1 if 24-hour clock
  6359.  12h    DWORD    address of case map routine
  6360.         (FAR CALL, AL = character to map to upper case [>= 80h])
  6361.  16h  2 BYTEs    ASCIZ data-list separator
  6362.  18h 10 BYTEs    reserved
  6363.  
  6364. (Table 1054)
  6365. Values for country code:
  6366.  001h    United States
  6367.  002h    Canadian-French
  6368.  003h    Latin America
  6369.  014h    Egypt
  6370.  01Bh    South Africa
  6371.  01Eh    Greece
  6372.  01Fh    Netherlands
  6373.  020h    Belgium
  6374.  021h    France
  6375.  022h    Spain
  6376.  024h    Hungary (not supported by DR DOS 5.0)
  6377.  026h    Yugoslavia (not supported by DR DOS 5.0) -- obsolete
  6378.  027h    Italy / San Marino / Vatican City
  6379.  028h    Romania
  6380.  029h    Switzerland / Liechtenstein
  6381.  02Ah    Czechoslovakia / Tjekia (not supported by DR DOS 5.0)
  6382.  02Bh    Austria (DR DOS 5.0)
  6383.  02Ch    United Kingdom
  6384.  02Dh    Denmark
  6385.  02Eh    Sweden
  6386.  02Fh    Norway
  6387.  030h    Poland (not supported by DR DOS 5.0)
  6388.  031h    Germany
  6389.  033h    Peru
  6390.  034h    Mexico
  6391.  035h    Cuba
  6392.  036h    Argentina
  6393.  037h    Brazil (not supported by DR DOS 5.0)
  6394.  038h    Chile
  6395.  039h    Columbia
  6396.  03Ah    Venezuela
  6397.  03Ch    Malaysia
  6398.  03Dh    International English / Australia
  6399.  03Eh    Indonesia / East Timor
  6400.  03Fh    Philippines
  6401.  040h    New Zealand
  6402.  041h    Singapore
  6403.  051h    Japan (DR DOS 5.0, MS-DOS 5.0+)
  6404.  052h    South Korea (DR DOS 5.0)
  6405.  054h    Vietnam
  6406.  056h    China (MS-DOS 5.0+)
  6407.  058h    Taiwan (MS-DOS 5.0+)
  6408.  05Ah    Turkey (MS-DOS 5.0+)
  6409.  05Bh    India
  6410.  05Ch    Pakistan
  6411.  05Dh    Afghanistan
  6412.  05Eh    Sri Lanka
  6413.  062h    Iran
  6414.  063h    Asian English
  6415.  070h    Belarus
  6416.  0C8h    Thailand
  6417.  0D4h    Morocco
  6418.  0D5h    Algeria
  6419.  0D8h    Tunisia
  6420.  0DAh    Libya
  6421.  0DCh    Gambia
  6422.  0DDh    Senegal
  6423.  0DEh    Maruitania
  6424.  0DFh    Mali
  6425.  0E0h    African Guinea
  6426.  0E1h    Ivory Coast
  6427.  0E2h    Burkina Faso
  6428.  0E3h    Niger
  6429.  0E4h    Togo
  6430.  0E5h    Benin
  6431.  0E6h    Mauritius
  6432.  0E7h    Liberia
  6433.  0E8h    Sierra Leone
  6434.  0E9h    Ghana
  6435.  0EAh    Nigeria
  6436.  0EBh    Chad
  6437.  0ECh    Centra African Republic
  6438.  0EDh    Cameroon
  6439.  0EEh    Cape Verde Islands
  6440.  0EFh    Sao Tome and Principe
  6441.  0F0h    Equatorial Guinea
  6442.  0F1h    Gabon
  6443.  0F2h    Congo
  6444.  0F3h    Zaire
  6445.  0F4h    Angola
  6446.  0F5h    Guinea-Bissau
  6447.  0F6h    Diego Garcia
  6448.  0F7h    Ascension Isle
  6449.  0F8h    Seychelles
  6450.  0F9h    Sudan
  6451.  0FAh    Rwhanda
  6452.  0FBh    Ethiopia
  6453.  0FCh    Somalia
  6454.  0FDh    Djibouti
  6455.  0FEh    Kenya
  6456.  0FFh    Tanzania
  6457.  100h    Uganda
  6458.  101h    Burundi
  6459.  103h    Mozambique
  6460.  104h    Zambia
  6461.  105h    Madagascar
  6462.  106h    Reunion Island
  6463.  107h    Zimbabwe
  6464.  108h    Namibia
  6465.  109h    Malawi
  6466.  10Ah    Lesotho
  6467.  10Bh    Botswana
  6468.  10Ch    Swaziland
  6469.  10Dh    Comoros
  6470.  10Eh    Mayotte
  6471.  122h    St. Helena
  6472.  129h    Aruba
  6473.  12Ah    Faroe Islands
  6474.  12Bh    Greenland
  6475.  15Eh    Gibraltar
  6476.  15Fh    Portugal
  6477.  160h    Luxembourg
  6478.  161h    Ireland
  6479.  162h    Iceland
  6480.  163h    Albania
  6481.  164h    Malta
  6482.  165h    Cyprus
  6483.  166h    Finland
  6484.  167h    Bulgaria
  6485.  172h    Lithuania
  6486.  173h    Latvia
  6487.  174h    Estonia
  6488.  175h    Moldova
  6489.  17Dh    Serbia / Montenegro
  6490.  181h    Croatia
  6491.  182h    Slovenia
  6492.  183h    Bosnia-Herzegovina (Latin)
  6493.  184h    Bosnia-Herzegovina (Cyrillic)
  6494.  185h    FYR Macedonia
  6495.  1A5h    Czech Republic
  6496.  1A6h    Slovakia
  6497.  1F4h    Falkland Islands
  6498.  1F5h    Belize
  6499.  1F6h    Guatemala
  6500.  1F7h    El Salvador
  6501.  1F8h    Honduras
  6502.  1F9h    Nicraragua
  6503.  1FAh    Costa Rica
  6504.  1FBh    Panama
  6505.  1FCh    St. Pierre and Miquelon
  6506.  1FDh    Haiti
  6507.  24Eh    Guadeloupe
  6508.  24Fh    Bolivia
  6509.  250h    Guyana
  6510.  251h    Ecuador
  6511.  252h    rench Guiana
  6512.  253h    Paraguay
  6513.  254h    Martinique / French Antilles
  6514.  255h    Suriname
  6515.  256h    Uruguay
  6516.  257h    Netherland Antilles
  6517.  29Eh    Saipan / N. Mariana Island
  6518.  29Fh    Guam
  6519.  2A0h    Norfolk Island (Australia) / Christmas Island/Cocos Islands / Antartica
  6520.  2A1h    Brunei Darussalam
  6521.  2A2h    Nauru
  6522.  2A3h    Papua New Guinea
  6523.  2A4h    Tonga Islands
  6524.  2A5h    Solomon Islands
  6525.  2A6h    Vanuatu
  6526.  2A7h    Fiji
  6527.  2A8h    Palau
  6528.  2A9h    Wallis & Futuna
  6529.  2AAh    Cook Islands
  6530.  2ABh    Niue
  6531.  2ACh    American Samoa
  6532.  2ADh    Western Samoa
  6533.  2AEh    Kiribati
  6534.  2AFh    New Caledonia
  6535.  2B0h    Tuvalu
  6536.  2B1h    French Polynesia
  6537.  2B2h    Tokealu
  6538.  2B3h    Micronesia
  6539.  2B4h    Marshall Islands
  6540.  311h    Arabic (Middle East/Saudi Arabia/etc.)
  6541.  324h    Ukraine
  6542.  329h    Antigua and Barbuda / Anguilla / Bahamas / Barbados / Bermuda
  6543.     British Virgin Islands / Cayman Islands / Dominica / Dominican Republ.
  6544.     Grenada / Jamaica / Montserra / St. Kitts and Nevis / St. Lucia
  6545.     St. Vincent and Grenadines / Trinidad and Tobago / Turks and Caicos
  6546.  352h    North Korea
  6547.  354h    Hong Kong
  6548.  355h    Macao
  6549.  357h    Cambodia
  6550.  358h    Laos
  6551.  370h    Bangladesh
  6552.  3C0h    Maldives
  6553.  3C1h    Lebanon
  6554.  3C2h    Jordan
  6555.  3C3h    Syrian Arab Republic
  6556.  3C4h    Ireq
  6557.  3C5h    Kuwait
  6558.  3C6h    Saudi Arabia
  6559.  3C7h    Yemen
  6560.  3C8h    Oman
  6561.  3CBh    United Arab Emirates
  6562.  3CCh    Israel (DR DOS 5.0,MS-DOS 5.0+)
  6563.  3CDh    Bahrain
  6564.  3CEh    Qatar
  6565.  3CFh    Bhutan
  6566.  3D0h    Mongolia
  6567.  3D1h    Nepal
  6568.  3E3h    Myanmar (Burma)
  6569. Note:    not all country codes are supported by all versions of DOS
  6570. --------D-2138--DXFFFF-----------------------
  6571. INT 21 - DOS 3.0+ - SET COUNTRY CODE
  6572.     AH = 38h
  6573.     DX = FFFFh
  6574.     AL = 01h thru FEh for specific country with code <255
  6575.     AL = FFh for specific country with code >= 255
  6576.        BX = 16-bit country code (see #1054)
  6577. Return: CF set on error
  6578.         AX = error code (see #1332 at AH=59h/BX=0000h)
  6579.     CF clear if successful
  6580. Note:    not supported by OS/2
  6581. SeeAlso: INT 2F/AX=1403h
  6582. --------D-2139-------------------------------
  6583. INT 21 - DOS 2+ - "MKDIR" - CREATE SUBDIRECTORY
  6584.     AH = 39h
  6585.     DS:DX -> ASCIZ pathname
  6586. Return: CF clear if successful
  6587.         AX destroyed
  6588.     CF set on error
  6589.         AX = error code (03h,05h) (see #1332 at AH=59h/BX=0000h)
  6590. Notes:    all directories in the given path except the last must exist
  6591.     fails if the parent directory is the root and is full
  6592.     DOS 2.x-3.3 allow the creation of a directory sufficiently deep that
  6593.       it is not possible to make that directory the current directory
  6594.       because the path would exceed 64 characters
  6595.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  6596. SeeAlso: AH=3Ah,AH=3Bh,AH=6Dh,AX=7139h,AH=E2h/SF=0Ah,INT 2F/AX=1103h
  6597. SeeAlso: INT 60/DI=0511h
  6598. --------D-213A-------------------------------
  6599. INT 21 - DOS 2+ - "RMDIR" - REMOVE SUBDIRECTORY
  6600.     AH = 3Ah
  6601.     DS:DX -> ASCIZ pathname of directory to be removed
  6602. Return: CF clear if successful
  6603.         AX destroyed
  6604.     CF set on error
  6605.         AX = error code (03h,05h,06h,10h) (see #1332 at AH=59h/BX=0000h)
  6606. Notes:    directory must be empty (contain only '.' and '..' entries)
  6607.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  6608. SeeAlso: AH=39h,AH=3Bh,AX=713Ah,AH=E2h/SF=0Bh,INT 2F/AX=1101h,INT 60/DI=0512h
  6609. --------D-213B-------------------------------
  6610. INT 21 - DOS 2+ - "CHDIR" - SET CURRENT DIRECTORY
  6611.     AH = 3Bh
  6612.     DS:DX -> ASCIZ pathname to become current directory (max 64 bytes)
  6613. Return: CF clear if successful
  6614.         AX destroyed
  6615.     CF set on error
  6616.         AX = error code (03h) (see #1332 at AH=59h/BX=0000h)
  6617. Notes:    if new directory name includes a drive letter, the default drive is
  6618.       not changed, only the current directory on that drive
  6619.     changing the current directory also changes the directory in which
  6620.       FCB file calls operate
  6621.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  6622. SeeAlso: AH=47h,AH=71h,INT 2F/AX=1105h
  6623. --------D-213C-------------------------------
  6624. INT 21 - DOS 2+ - "CREAT" - CREATE OR TRUNCATE FILE
  6625.     AH = 3Ch
  6626.     CX = file attributes (see #1055)
  6627.     DS:DX -> ASCIZ filename
  6628. Return: CF clear if successful
  6629.         AX = file handle
  6630.     CF set on error
  6631.         AX = error code (03h,04h,05h) (see #1332 at AH=59h/BX=0000h)
  6632. Notes:    if a file with the given name exists, it is truncated to zero length
  6633.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  6634.     DR DOS checks the system password or explicitly supplied password at
  6635.       the end of the filename against the reserved field in the directory
  6636.       entry before allowing access
  6637. SeeAlso: AH=16h,AH=3Dh,AH=5Ah,AH=5Bh,AH=93h,INT 2F/AX=1117h
  6638.  
  6639. Bitfields for file attributes:
  6640. Bit(s)    Description    (Table 1055)
  6641.  0    read-only
  6642.  1    hidden
  6643.  2    system
  6644.  3    volume label (ignored)
  6645.  4    reserved, must be zero (directory)
  6646.  5    archive bit
  6647.  7    if set, file is shareable under Novell NetWare
  6648. --------D-213D-------------------------------
  6649. INT 21 - DOS 2+ - "OPEN" - OPEN EXISTING FILE
  6650.     AH = 3Dh
  6651.     AL = access and sharing modes (see #1056)
  6652.     DS:DX -> ASCIZ filename
  6653.     CL = attribute mask of files to look for (server call only)
  6654. Return: CF clear if successful
  6655.         AX = file handle
  6656.     CF set on error
  6657.         AX = error code (01h,02h,03h,04h,05h,0Ch,56h) (see #1332 at AH=59h)
  6658. Notes:    file pointer is set to start of file
  6659.     file handles which are inherited from a parent also inherit sharing
  6660.       and access restrictions
  6661.     files may be opened even if given the hidden or system attributes
  6662.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  6663.     DR DOS checks the system password or explicitly supplied password at
  6664.       the end of the filename against the reserved field in the directory
  6665.       entry before allowing access
  6666.     sharing modes are only effective on local drives if SHARE is loaded
  6667. BUG:    Novell DOS 7 SHARE v1.00 would refuse file access in the cases in
  6668.       #1057 marked with [1] (read-only open of a read-only file
  6669.       which had previously been opened in compatibility mode); this was
  6670.       fixed in SHARE v1.01 of 09/29/94
  6671. SeeAlso: AH=0Fh,AH=3Ch,AX=4301h,AX=5D00h,INT 2F/AX=1116h,INT 2F/AX=1226h
  6672.  
  6673. Bitfields for access and sharing modes:
  6674. Bit(s)    Description    (Table 1056)
  6675.  2-0    access mode
  6676.     000 read only
  6677.     001 write only
  6678.     010 read/write
  6679.     011 (DOS 5+ internal) passed to redirector on EXEC to allow
  6680.         case-sensitive filenames
  6681.  3    reserved (0)
  6682.  6-4    sharing mode (DOS 3.0+) (see #1057)
  6683.     000 compatibility mode
  6684.     001 "DENYALL" prohibit both read and write access by others
  6685.     010 "DENYWRITE" prohibit write access by others
  6686.     011 "DENYREAD" prohibit read access by others
  6687.     100 "DENYNONE" allow full access by others
  6688.     111 network FCB (only available during server call)
  6689.  7    inheritance
  6690.     if set, file is private to current process and will not be inherited
  6691.       by child processes
  6692. SeeAlso: #1436
  6693.  
  6694. (Table 1057)
  6695. Values of DOS file sharing behavior:
  6696.       |    Second and subsequent Opens
  6697.  First      |Compat  Deny      Deny     Deny    Deny
  6698.  Open      |       All      Write     Read    None
  6699.       |R W RW R W RW R W RW R W RW R W RW
  6700.  - - - - -| - - - - - - - - - - - - - - - - -
  6701.  Compat R |Y Y Y  N N N     1 N N    N N N  1 N N
  6702.     W |Y Y Y  N N N     N N N    N N N  N N N
  6703.     RW|Y Y Y  N N N     N N N    N N N  N N N
  6704.  - - - - -|
  6705.  Deny    R |C C C  N N N     N N N    N N N  N N N
  6706.  All    W |C C C  N N N     N N N    N N N  N N N
  6707.     RW|C C C  N N N     N N N    N N N  N N N
  6708.  - - - - -|
  6709.  Deny    R |2 C C  N N N     Y N N    N N N  Y N N
  6710.  Write    W |C C C  N N N     N N N    Y N N  Y N N
  6711.     RW|C C C  N N N     N N N    N N N  Y N N
  6712.  - - - - -|
  6713.  Deny    R |C C C  N N N     N Y N    N N N  N Y N
  6714.  Read    W |C C C  N N N     N N N    N Y N  N Y N
  6715.     RW|C C C  N N N     N N N    N N N  N Y N
  6716.  - - - - -|
  6717.  Deny    R |2 C C  N N N     Y Y Y    N N N  Y Y Y
  6718.  None    W |C C C  N N N     N N N    Y Y Y  Y Y Y
  6719.     RW|C C C  N N N     N N N    N N N  Y Y Y
  6720. Legend: Y = open succeeds, N = open fails with error code 05h
  6721.     C = open fails, INT 24 generated
  6722.     1 = open succeeds if file read-only, else fails with error code
  6723.     2 = open succeeds if file read-only, else fails with INT 24
  6724. SeeAlso: #1288
  6725. --------v-213D76-----------------------------
  6726. INT 21 - VIRUS - "GT-SPOOF" -INSTALLATION CHECK
  6727.     AX = 3D76h
  6728. Return: AX = 763Dh if resident
  6729. SeeAlso: AX=357Fh,AX=3DFFh
  6730. --------v-213DFF-----------------------------
  6731. INT 21 - VIRUS - "JD-448" - INSTALLATION CHECK
  6732.     AX = 3DFFh
  6733. Return: AX = 4A44h if resident
  6734. SeeAlso: AX=3D76h,AX=4203h
  6735. --------D-213E-------------------------------
  6736. INT 21 - DOS 2+ - "CLOSE" - CLOSE FILE
  6737.     AH = 3Eh
  6738.     BX = file handle
  6739. Return: CF clear if successful
  6740.         AX destroyed
  6741.     CF set on error
  6742.         AX = error code (06h) (see #1332 at AH=59h/BX=0000h)
  6743. Notes:    if the file was written to, any pending disk writes are performed, the
  6744.       time and date stamps are set to the current time, and the directory
  6745.       entry is updated
  6746.     recent versions of DOS preserve AH because some versions of Multiplan
  6747.       had a bug which depended on AH being preserved
  6748. SeeAlso: AH=10h,AH=3Ch,AH=3Dh,INT 2F/AX=1106h,INT 2F/AX=1227h
  6749. --------D-213F-------------------------------
  6750. INT 21 - DOS 2+ - "READ" - READ FROM FILE OR DEVICE
  6751.     AH = 3Fh
  6752.     BX = file handle
  6753.     CX = number of bytes to read
  6754.     DS:DX -> buffer for data
  6755. Return: CF clear if successful
  6756.         AX = number of bytes actually read (0 if at EOF before call)
  6757.     CF set on error
  6758.         AX = error code (05h,06h) (see #1332 at AH=59h/BX=0000h)
  6759. Notes:    data is read beginning at current file position, and the file position
  6760.       is updated after a successful read
  6761.     the returned AX may be smaller than the request in CX if a partial
  6762.       read occurred
  6763.     if reading from CON, read stops at first CR
  6764.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  6765. BUG:    Novell NETX.EXE v3.26 and 3.31 do not set CF if the read fails due to
  6766.       a record lock (see AH=5Ch), though it does return AX=0005h; this
  6767.       has been documented by Novell
  6768. SeeAlso: AH=27h,AH=40h,AH=93h,INT 2F/AX=1108h,INT 2F/AX=1229h
  6769. --------G-213F-------------------------------
  6770. INT 21 - Turbo Debug HARDWARE BREAKPOINTS - READ STATUS BLOCK
  6771.     AH = 3Fh
  6772.     BX = handle for character device "TDHDEBUG"
  6773.     CX = number of bytes to read
  6774.     DS:DX -> buffer for status block (see #1059)
  6775. Return: CF clear if successful
  6776.         AX = number of bytes actually read
  6777.     CF set on error
  6778.         AX = error code (05h,06h) (see #1332 at AH=59h/BX=0000h)
  6779. SeeAlso: AH=40h"Turbo Debug"
  6780.  
  6781. (Table 1058)
  6782. Values for status of Turbo Debugger command:
  6783.  00h    successful
  6784.  01h    invalid handle
  6785.  02h    no more breakpoints available
  6786.  03h    hardware does not support specified breakpoint type
  6787.  04h    previous command prevents execution
  6788.  05h    debugger hardware not found
  6789.  06h    hardware failure
  6790.  07h    invalid command
  6791.  08h    driver not initialized yet
  6792.  FEh    recursive entry (hardware breakpoint inside hw bp handler)
  6793.  
  6794. Format of Turbo Debugger status block:
  6795. Offset    Size    Description    (Table 1059)
  6796.  00h    BYTE    status of command (see #1058)
  6797. ---status for command 01h---
  6798.  01h    WORD    device driver interface version number (currently 1)
  6799.  03h    WORD    device driver software version
  6800.  05h    BYTE    maximum simultaneous hardware breakpoints
  6801.  06h    BYTE    configuration bits (see #1060)
  6802.  07h    BYTE    supported breakpoint types (see #1061)
  6803.  08h    WORD    supported addressing match modes (see #1062)
  6804.  0Ah    WORD    supported data matches (see #1063)
  6805.  0Ch    BYTE    maximum data match length (01h, 02h, or 04h)
  6806.  0Dh    WORD    size of onboard memory (in KB)
  6807.  0Fh    WORD    maximum number of trace-back events
  6808.  11h    WORD    hardware breakpoint enable byte address segment (0000h if not
  6809.           supported)
  6810. ---status for command 04h---
  6811.  01h    BYTE    handle to use when referring to the just-set breakpoint
  6812.  
  6813. Bitfields for Turbo Debugger configuration bits:
  6814. Bit(s)    Description    (Table 1060)
  6815.  0    CPU and DMA accesses are distinct
  6816.  1    can detect DMA transfers
  6817.  2    supports data mask
  6818.  3    hardware pass counter on breakpoints
  6819.  4    can match on data as well as addresses
  6820.  
  6821. Bitfields for Turbo Debugger supported breakpoint types:
  6822. Bit(s)    Description    (Table 1061)
  6823.  0    memory read
  6824.  1    memory write
  6825.  2    memory read/write
  6826.  3    I/O read
  6827.  4    I/O write
  6828.  5    I/O read/write
  6829.  6    instruction fetch
  6830.  
  6831. Bitfields for Turbo Debugger supported addressing match modes:
  6832. Bit(s)    Description    (Table 1062)
  6833.  0    any address
  6834.  1    equal to test value
  6835.  2    not equal
  6836.  3    above test value
  6837.  4    below test value
  6838.  5    below or equal
  6839.  6    above or equal
  6840.  7    within range
  6841.  8    outside range
  6842.  
  6843. Bitfields for Turbo Debugger supported data matches:
  6844. Bit(s)    Description    (Table 1063)
  6845.  0    any data
  6846.  1    equal to test value
  6847.  2    not equal
  6848.  3    above test value
  6849.  4    below test value
  6850.  5    below or equal
  6851.  6    above or equal
  6852.  7    within range
  6853.  8    outside range
  6854. --------N-213F-------------------------------
  6855. INT 21 - PC/TCP IPCUST.SYS - READ CONFIGURATION DATA
  6856.     AH = 3Fh
  6857.     BX = handle for character device "$IPCUST"
  6858.     CX = number of bytes to read
  6859.     DS:DX -> buffer for configuration data (see #1064)
  6860. Return: CF clear if successful
  6861.         AX = number of bytes actually read
  6862.     CF set on error
  6863.         AX = error code (05h,06h) (see #1332 at AH=59h/BX=0000h)
  6864. Notes:    if less than the entire data is read or written, the next read/write
  6865.       continues where the previous one ended; IOCTL calls AX=4402h and
  6866.       AX=4403h both reset the location at which the next operation starts
  6867.       to zero
  6868.     the data pointer is also reset to zero if the previous read or write
  6869.       reached or exceeded the end of the data, when the current function
  6870.       is read and the previous was write, or vice versa
  6871.     v2.1+ uses a new configuration method, but allows the installation
  6872.       of IPCUST.SYS for backward compatibility with other software which
  6873.       must read the PC/TCP configuration
  6874. SeeAlso: AH=40h"IPCUST",AX=4402h"IPCUST",AX=4402h"FTPSOFT"
  6875.  
  6876. Format of PC/TCP configuration data:
  6877. Offset    Size    Description    (Table 1064)
  6878.  00h 12 BYTEs    IPCUST.SYS device driver header (see #1298)
  6879.  12h    BYTE    ???
  6880.  13h    BYTE    ???
  6881.  14h    WORD    ???
  6882.  16h    BYTE    bit flags
  6883.         bit 0: send BS rather than DEL for BackSpace key
  6884.         bit 1: wrap long lines
  6885.  17h    BYTE    ???
  6886.  18h 64 BYTEs    ASCIZ hostname
  6887.  58h 64 BYTEs    ASCIZ domain name
  6888.         (fully qualified domain name is hostname.domain-name)
  6889.  98h 16 BYTEs    ASCIZ username
  6890.  A8h 64 BYTEs    ASCIZ full name
  6891.  E8h 64 BYTEs    ASCIZ office address
  6892. 128h 32 BYTEs    ASCIZ phone number
  6893. 148h    WORD    offset from GMT in minutes
  6894. 14Ah  4 BYTEs    ASCIZ timezone name
  6895. 14Eh    WORD    number of time servers
  6896. 150h  ? DWORDs    (big-endian) IP addresses for time servers
  6897.     ???
  6898. 164h    WORD    number of old-style name servers
  6899. 166h  3 DWORDs    (big-endian) IP addresses for name servers
  6900. 172h    WORD    number of domain name servers
  6901. 174h  3 DWORDs    (big-endian) IP addresses for domain name servers
  6902. 180h    DWORD    (big-endian) IP address of default gateway
  6903. 184h    DWORD    (big-endian) IP address of log server
  6904. 188h    DWORD    (big-endian) IP address of cookie server
  6905. 18Ch    DWORD    (big-endian) IP address of lpr server
  6906. 190h    DWORD    (big-endian) IP address of imagen print server
  6907. 194h 54 BYTEs    ???
  6908. 1E8h    WORD    TCP default window size in bytes
  6909. 1EAh    WORD    TCP low window size
  6910. 1ECh 64 BYTEs    ASCIZ host tabel filename
  6911. 22Ch  2 BYTEs    ???
  6912. 22Eh 80 BYTEs    ASCIZ mail relay host name
  6913. 27Eh    BYTE    ???
  6914. 27Fh    BYTE    ??? bit flags
  6915. 280h 44 BYTEs    ???
  6916. 2ACh    WORD    ???
  6917. 2AEh 202 BYTEs    ???
  6918. --------N-213F-------------------------------
  6919. INT 21 - WORKGRP.SYS - GET ENTRY POINT
  6920.     AH = 3Fh
  6921.     BX = file handle for device "NET$HLP$"
  6922.     CX = 0008h
  6923.     DS:DX -> buffer for entry point record (see #1138)
  6924. Return: CF clear if successful
  6925.         AX = number of bytes actually read (0 if at EOF before call)
  6926.     CF set on error
  6927.         AX = error code (05h,06h) (see #1332 at AH=59h/BX=0000h)
  6928. Program: WORKGRP.SYS is the portion of Microsoft's Workgroup Connection which
  6929.       permits communication with PCs running Windows for Workgroups or
  6930.       LAN Manager
  6931. SeeAlso: AX=4402h"WORKGRP.SYS",INT 2F/AX=9400h
  6932. --------N-213F-------------------------------
  6933. INT 21 - BW-TCP - GET DRIVER INFO
  6934.     AH = 3Fh
  6935.     BX = file handle for device "ETHDEV27"
  6936.     CX = 002Bh
  6937.     DS:DX -> buffer for driver info (see #1065)
  6938. Return: CF clear if successful
  6939.         AX = number of bytes actually read (0 if at EOF before call)
  6940.     CF set on error
  6941.         AX = error code (05h,06h) (see #1332 at AH=59h/BX=0000h)
  6942. Program: BW-TCP is a TCP/IP protocol stack by Beame & Whiteside Software
  6943. Notes:    the B&W socket library performs an INT 21/AX=4401h with DX=0060h before
  6944.       making this call to retrieve the driver information; one should also
  6945.       call the private API interrupt with AH=15h
  6946.     the installation check for the TCP/IP stack is to test for the
  6947.       existence of the character device UDP-IP10
  6948. SeeAlso: INT 14/AH=56h,INT 62/AH=00h"ETHDEV",INT 63/AH=03h,INT 64/AH=01h
  6949. Index:    installation check;BW-TCP hardware driver
  6950. Index:    installation check;BW-TCP TCPIP.SYS
  6951.  
  6952. Format of BW-TCP driver info:
  6953. Offset    Size    Description    (Table 1065)
  6954.  00h    WORD    I/O base address
  6955.  02h    BYTE    shared memory page (01h = segment 0100h, etc.)
  6956.  03h    BYTE    interrupt vector for private API
  6957.  04h    BYTE    IRQ used by board
  6958.  05h    WORD    size of data buffer
  6959.  07h    WORD    maximum transfer window
  6960.  09h    WORD    time zone
  6961.  0Bh    BYTE    address type (01h user, 04h RARP, 05h BOOTP)
  6962.  0Ch    DWORD    internet address
  6963.  10h    WORD    "value" ???
  6964.  12h    BYTE    subnet mask
  6965.  13h    WORD    "ether_pointer" ???
  6966.  15h    WORD    offset in device driver of log server records (see #1066)
  6967.  17h    WORD    offset in device driver of name server records (see #1066)
  6968.  19h    WORD    offset in device driver of print server records (see #1066)
  6969.  1Bh    WORD    offset in device driver of time server records (see #1066)
  6970.  1Dh    WORD    offset in device driver of gateway records (see #1066)
  6971.  1Fh    WORD    segment address of device driver
  6972.  21h    BYTE    transfer size
  6973.  22h  9 BYTEs    network adapter board name
  6974. ---11/21/91+ ---
  6975.  23h    BYTE    ETHDEV version (major in high nybble, minor in low nybble)
  6976.  24h    BYTE    ETHDEV revision
  6977.  25h    BYTE    TCPIP version (major in high nybble, minor in low nybble)
  6978.  26h    BYTE    TCPIP revision
  6979.  27h    BYTE    BWRPC version (major in high nybble, minor in low nybble)
  6980.  28h    BYTE    BWRPC revision
  6981.  29h    BYTE    BWNFS version (major in high nybble, minor in low nybble)
  6982.  2Ah    BYTE    BWNFS revision
  6983.  2Bh    BYTE    Telnet version (major in high nybble, minor in low nybble)
  6984.  2Ch    BYTE    Telnet revision
  6985.  2Dh    BYTE    NETBIOS version (major in high nybble, minor in low nybble)
  6986.  2Eh    BYTE    NETBIOS revision
  6987. Note:    for each driver, if version=0, the driver is not installed or does
  6988.       not support the version check
  6989.  
  6990. Format of BW-TCP server records:
  6991. Offset    Size    Description    (Table 1066)
  6992.  00h    BYTE    number of server records following
  6993.  01h  N DWORDs    internet addresses of servers
  6994. --------y-213F-------------------------------
  6995. INT 21 - Trusted Access - NB.SYS - GET STATE
  6996.     AH = 3Fh
  6997.     BX = file handle for device "$$NB$$NB"
  6998.     CX = 0002h (size of state)
  6999.     DS:DX -> buffer for state record (see #1067)
  7000. Return: CF clear if successful
  7001.         AX = number of bytes actually read (0 if at EOF before call)
  7002.     CF set on error
  7003.         AX = error code (05h,06h) (see #1332 at AH=59h/BX=0000h)
  7004. Program: Trusted Access is a security and access-control package by Lassen
  7005.       Software, Inc.; NB.SYS is a device driver to prevent the user from
  7006.       terminating CONFIG.SYS or AUTOEXEC.BAT with Ctrl-Break
  7007. SeeAlso: AH=40h"NB.SYS",AX=4101h
  7008.  
  7009. Format of Trusted Access state record:
  7010. Offset    Size    Description    (Table 1067)
  7011.  00h    BYTE    00h off, 01h on
  7012.  01h    BYTE    keys being disabled
  7013.         bit 0: Ctrl-Break
  7014.         bit 1: SysReq
  7015.         bit 2: Ctrl and Alt
  7016.         bit 3: Ctrl-Alt-Del
  7017.         bit 7: all keys (overrides other bits)
  7018. ----------213F-------------------------------
  7019. INT 21 U - IFSHLP.SYS - GET ENTRY POINT
  7020.     AH = 3Fh
  7021.     BX = file handle for device "IFS$HLP$"
  7022.     CX = 0008h (size of buffer in bytes)
  7023.     DS:DX -> buffer for entry point record (see #1068)
  7024. Return: CF clear if successful
  7025.         AX = number of bytes actually read (0 if at EOF before call)
  7026.     CF set on error
  7027.         AX = error code (05h,06h) (see #1332 at AH=59h/BX=0000h)
  7028. Program: IFSHLP.SYS is a support driver for Microsoft Windows for Workgroups
  7029. SeeAlso: AX=4402h"IFSHLP"
  7030.  
  7031. Format of IFSHLP.SYS entry point record:
  7032. Offset    Size    Description    (Table 1068)
  7033.  00h  4 BYTEs    (call) required signature if called via IOCTL
  7034.             70h E9h 34h 37h for Windows 3.11
  7035.             70h E9h 35h 37h for Windows 3.11
  7036.         (ret) signature 34h 37h 70h EFh (Windows 3.11)
  7037.         (ret) signature 35h 37h 70h EFh (Windows95)
  7038.  04h    DWORD    (ret) pointer to FAR call entry point (see #1069)
  7039.  
  7040. (Table 1069)
  7041. Call IFSHLP.SYS entry point with:
  7042.     STACK:    WORD    function number (00h-0Ch)
  7043.             00h get ??? data
  7044.             01h set interrupt intercepts (trap)
  7045.             02h remove interrupt intercepts (untrap)
  7046.             03h ??? LPT2
  7047.             04h ??? LPT1
  7048.             05h revector INT 2F to trap and remove trap for others
  7049.             06h set ??? flag
  7050.             07h clear ??? flag
  7051.             08h get ??? flag word
  7052.             ---Windows 3.11 only---
  7053.             09h ???
  7054.             0Ah ???
  7055.             0Bh ???
  7056.             0Ch get ???
  7057. ---if function 00h---
  7058. Return: DX:AX -> ??? data (see #1070)
  7059.     BX destroyed
  7060. ---if function 01h---
  7061.     STACK:    DWORD    new intercept (trap) address
  7062. Return: AX = status
  7063.         0000h successful
  7064.         0001h failed (already set)
  7065.         DX = 0000h
  7066.     BX destroyed
  7067. Note:    the trap handler is called with a function number in BX, and the
  7068.       original BX on top of the stack; a null handler must perform a
  7069.       POP BX and an IRET
  7070. ---if function 02h---
  7071. Return: AX = status
  7072.         0000h successful
  7073.         0001h failed (not set)
  7074.     DX = 0000h
  7075.     BX destroyed
  7076. ---if function 03h,04h---
  7077.     STACK:    WORD    ???
  7078. Return: AX = 0000h
  7079.     DX = 0000h
  7080.     BX destroyed
  7081. ---if function 05h---
  7082.     ???
  7083. Return:    BX destroyed
  7084. ---if function 06h---
  7085. Return: AX = 0001h and DX = 0000h if already set
  7086.     AX,DX unchanged if successful
  7087.     BX destroyed
  7088. ---if function 07h---
  7089. Return: AX = 0001h and DX = 0000h if not set
  7090.     AX,DX unchanged if successful
  7091.     BX destroyed
  7092. ---if function 08h---
  7093. Return: DX = 0000h
  7094.     AX = flags
  7095.         bit 0: set/cleared by functions 06h and 07h
  7096.         bit 1: trap is currently set (refer to functions 01h/02h)
  7097.     BX destroyed
  7098. ---if function 09h---
  7099. Return: AX = status
  7100.         0000h successful
  7101.         0001h failed (already called)
  7102.     BX destroyed
  7103. ---if function 0Ah---
  7104.     STACK:    WORD    ???
  7105.     ???
  7106. Return:    BX destroyed
  7107. ---if function 0Bh---
  7108. Return: AX = status
  7109.         0000h successful
  7110.         0001h failed (not set)
  7111.     BX destroyed
  7112. ---if function 0Ch---
  7113. Return: AX = 0000h
  7114.     ES:BX -> ??? data
  7115. ---if function > 0Ch---
  7116. Return: AX = 0001h
  7117.     DX = 0000h
  7118.     BX destroyed
  7119.  
  7120. Format of IFSHLP ??? data:
  7121. Offset    Size    Description    (Table 1070)
  7122.  00h    DWORD    -> DOS Swappable Data Area (see #1339,#1341)
  7123.  02h    WORD    ??? offset in DOS data segment?
  7124.  04h    WORD    offset in DOS data segment of current-PSP WORD
  7125.  06h    WORD    ???
  7126.  08h    WORD    ???
  7127.  0Ah    WORD    ???
  7128.  0Ch    DWORD    -> DOS List of Lists (see #1279)
  7129.  10h    ???
  7130. SeeAlso: #1069
  7131. --------v-213F--BXFEB0-----------------------
  7132. INT 21 - VIRUS - "KYZ/LieWait" - INSTALLATION CHECK
  7133.     AH = 3Fh
  7134.     BX = FEB0h
  7135. Return: BX = 1212h if resident
  7136. SeeAlso: AX=3032h"VIRUS",AX=4BF1h"VIRUS"
  7137. --------D-2140-------------------------------
  7138. INT 21 - DOS 2+ - "WRITE" - WRITE TO FILE OR DEVICE
  7139.     AH = 40h
  7140.     BX = file handle
  7141.     CX = number of bytes to write
  7142.     DS:DX -> data to write
  7143. Return: CF clear if successful
  7144.         AX = number of bytes actually written
  7145.     CF set on error
  7146.         AX = error code (05h,06h) (see #1332 at AH=59h/BX=0000h)
  7147. Notes:    if CX is zero, no data is written, and the file is truncated or
  7148.       extended to the current position
  7149.     data is written beginning at the current file position, and the file
  7150.       position is updated after a successful write
  7151.     for FAT32 drives, the file must have been opened with AX=6C00h with
  7152.       the "extended size" flag in order to expand the file beyond 2GB;
  7153.       otherwise the write will fail with error code 0005h (access denied)
  7154.     the usual cause for AX < CX on return is a full disk
  7155. BUG:    a write of zero bytes will appear to succeed when it actually failed
  7156.       if the write is extending the file and there is not enough disk
  7157.       space for the expanded file (DOS 5.0-6.0); one should therefore check
  7158.       whether the file was in fact extended by seeking to 0 bytes from
  7159.       the end of the file (INT 21/AX=4202h/CX=0000h/DX=0000h)
  7160.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  7161. SeeAlso: AH=28h,AH=3Fh"DOS",AH=93h,INT 2F/AX=1109h
  7162. --------G-2140-------------------------------
  7163. INT 21 - Turbo Debug HARDWARE BREAKPOINTS - SEND CMD TO HARDWARE BRKPNT DRIVER
  7164.     AH = 40h
  7165.     BX = handle for character device "TDHDEBUG"
  7166.     CX = number of bytes to write
  7167.     DS:DX -> hardware breakpoint command (see #1071)
  7168. Return: CF clear if successful
  7169.         AX = number of bytes actually written
  7170.     CF set on error
  7171.         AX = error code (05h,06h) (see #1332 at AH=59h/BX=0000h)
  7172. Note:    results are retrieved by reading from the device
  7173. SeeAlso: AH=3Fh"Turbo Debug"
  7174.  
  7175. Format of Turbo Debugger hardware breakpoint commands:
  7176. Offset    Size    Description    (Table 1071)
  7177.  00h    BYTE    command code
  7178.         00h install interrupt vectors
  7179.         01h get hardware capabilities
  7180.         02h enable hardware breakpoints
  7181.         03h disable hardware breakpoints
  7182.         04h set hardware breakpoint
  7183.         05h clear hardware breakpoint
  7184.         06h set I/O base address and reset hardware
  7185.         07h restore interrupt vectors
  7186. ---command code 00h---
  7187.  01h    DWORD    pointer to Turbo Debugger entry point to be jumped to on
  7188.           hardware breakpoint; call with CPU state the same as on
  7189.           the breakpoint except for pushing AX and placing an entry
  7190.           code (FFh if breakout button or breakpoint handle) in AH
  7191. ---command code 04h---
  7192.  01h    BYTE    breakpoint type
  7193.         00h memory read
  7194.         01h memory write
  7195.         02h memory read/write
  7196.         03h I/O read
  7197.         04h I/O write
  7198.         05h I/O read/write
  7199.         06h instruction fetch
  7200.  02h    BYTE    address matching mode (see #1072)
  7201.  03h    DWORD    32-bit linear low address
  7202.  07h    DWORD    32-bit linear high address
  7203.  0Bh    WORD    pass count
  7204.  0Dh    BYTE    data size (01h, 02h, or 04h)
  7205.  0Eh    BYTE    source of matched bus cycle (01h CPU, 02h DMA, 03h either)
  7206.  0Fh    BYTE    data-matching mode (see #1072)
  7207.  10h    DWORD    low data value
  7208.  14h    DWORD    high data value
  7209.  18h    DWORD    data mask specifying which bits of the data are tested
  7210. ---command code 05h---
  7211.  01h    BYTE    handle of breakpoint to clear (breakpoint returned from command
  7212.           04h)
  7213. ---command code 06h---
  7214.  01h    WORD    base address of hardware debugger board
  7215.  
  7216. (Table 1072)
  7217. Values for Turbo Debugger address/data matching mode:
  7218.  00h    match any
  7219.  01h    equal to test value
  7220.  02h    different from test value
  7221.  03h    above test value
  7222.  04h    below test value
  7223.  05h    below or equal to test value
  7224.  06h    above or equal to test value
  7225.  07h    within inclusive range
  7226.  08h    outside specified range
  7227. --------N-2140-------------------------------
  7228. INT 21 - PC/TCP IPCUST.SYS - WRITE CONFIGURATION DATA
  7229.     AH = 40h
  7230.     BX = handle for character device "$IPCUST"
  7231.     CX = number of bytes to write
  7232.     DS:DX -> buffer for configuration data (AH=3Fh"IPCUST")
  7233. Return: CF clear if successful
  7234.         AX = number of bytes actually written
  7235.     CF set on error
  7236.         AX = error code (05h,06h) (see #1332 at AH=59h/BX=0000h)
  7237. Notes:    if less than the entire data is read or written, the next read/write
  7238.       continues where the previous one ended; IOCTL calls AX=4402h and
  7239.       AX=4403h both reset the location at which the next operation starts
  7240.       to zero
  7241.     the data pointer is also reset to zero if the previous read or write
  7242.       reached or exceeded the end of the data, when the current function
  7243.       is read and the previous was write, or vice versa
  7244.     v2.1+ uses a new configuration method, but allows the installation
  7245.       of IPCUST.SYS for backward compatibility with other software which
  7246.       must read the PC/TCP configuration
  7247. SeeAlso: AH=3Fh"IPCUST",AX=4402h"IPCUST"
  7248. --------y-2140-------------------------------
  7249. INT 21 U - Trusted Access - NB.SYS - SET STATE
  7250.     AH = 40h
  7251.     BX = handle for character device "$$NB$$NB"
  7252.     DS:DX -> state record (see #1067)
  7253.     CX ignored
  7254. Return: CF clear if successful
  7255.         AX = number of bytes actually written
  7256.     CF set on error
  7257.         AX = error code (05h,06h) (see #1332 at AH=59h/BX=0000h)
  7258. Program: Trusted Access is a security and access-control package by Lassen
  7259.       Software, Inc.; NB.SYS is a device driver to prevent the user from
  7260.       terminating CONFIG.SYS or AUTOEXEC.BAT with Ctrl-Break
  7261. SeeAlso: AH=3Fh"NB.SYS"
  7262. --------j-214000BX0002-----------------------
  7263. INT 21 - FARTBELL.EXE - INSTALLATION CHECK
  7264.     AX = 4000h
  7265.     BX = 0002h
  7266.     CX = 0000h
  7267.     DS:DX = 0000h:0000h
  7268. Return: CF clear if installed
  7269.         AX = CS of resident code
  7270. Program: FARTBELL is a joke program by Guenther Thiele which makes various
  7271.       noises when programs output a bell
  7272. SeeAlso: AX=4001h
  7273. --------j-214001BX0002-----------------------
  7274. INT 21 - FARTBELL.EXE - FORCE NOISE
  7275.     AX = 4001h
  7276.     BX = 0002h
  7277.     CX = 0000h
  7278.     DS:DX = 0000h:0000h
  7279. Program: FARTBELL is a joke program by Guenther Thiele which makes various
  7280.       noises when programs output a bell
  7281. SeeAlso: AX=4000h
  7282. --------D-2141-------------------------------
  7283. INT 21 - DOS 2+ - "UNLINK" - DELETE FILE
  7284.     AH = 41h
  7285.     DS:DX -> ASCIZ filename (no wildcards, but see notes)
  7286.     CL = attribute mask for deletion (server call only, see notes)
  7287. Return: CF clear if successful
  7288.         AX destroyed (DOS 3.3) AL seems to be drive of deleted file
  7289.     CF set on error
  7290.         AX = error code (02h,03h,05h) (see #1332 at AH=59h/BX=0000h)
  7291. Notes:    (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
  7292.       the filespec must be canonical (as returned by AH=60h), and only
  7293.       files matching the attribute mask in CL are deleted
  7294.     DR DOS 5.0-6.0 returns error code 03h if invoked via AX=5D00h; DR DOS
  7295.       3.41 crashes if called via AX=5D00h with wildcards
  7296.     DOS does not erase the file's data; it merely becomes inaccessible
  7297.       because the FAT chain for the file is cleared
  7298.     deleting a file which is currently open may lead to filesystem
  7299.       corruption.  Unless SHARE is loaded, DOS does not close the handles
  7300.       referencing the deleted file, thus allowing writes to a nonexistant
  7301.       file.
  7302.     under DR DOS and DR Multiuser DOS, this function will fail if the file
  7303.       is currently open
  7304.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  7305. BUG:    DR DOS 3.41 crashes if called via AX=5D00h
  7306. SeeAlso: AH=13h,AX=4301h,AX=4380h,AX=5D00h,AH=60h,AH=71h,AX=F244h
  7307. SeeAlso: INT 2F/AX=1113h
  7308. --------y-214101DXFFFE-----------------------
  7309. INT 21 - SoftLogic Data Guardian - ???
  7310.     AX = 4101h
  7311.     DX = FFFEh
  7312. Return: AX = 0000h if installed
  7313. Note:    resident code sets several internal variables on this call
  7314. SeeAlso: AH=3Fh"NB.SYS",INT 16/AX=FFA3h/BX=0000h
  7315. --------D-2142-------------------------------
  7316. INT 21 - DOS 2+ - "LSEEK" - SET CURRENT FILE POSITION
  7317.     AH = 42h
  7318.     AL = origin of move
  7319.         00h start of file
  7320.         01h current file position
  7321.         02h end of file
  7322.     BX = file handle
  7323.     CX:DX = offset from origin of new file position
  7324. Return: CF clear if successful
  7325.         DX:AX = new file position in bytes from start of file
  7326.     CF set on error
  7327.         AX = error code (01h,06h) (see #1332 at AH=59h/BX=0000h)
  7328. Notes:    for origins 01h and 02h, the pointer may be positioned before the
  7329.       start of the file; no error is returned in that case, but subsequent
  7330.       attempts at I/O will produce errors
  7331.     if the new position is beyond the current end of file, the file will
  7332.       be extended by the next write (see AH=40h); for FAT32 drives, the
  7333.       file must have been opened with AX=6C00h with the "extended size"
  7334.       flag in order to expand the file beyond 2GB
  7335. BUG:    using this method to grow a file from zero bytes to a very large size
  7336.       can corrupt the FAT in some versions of DOS; the file should first
  7337.       be grown from zero to one byte and then to the desired large size
  7338. SeeAlso: AH=24h,INT 2F/AX=1228h
  7339. --------v-214203-----------------------------
  7340. INT 21 - VIRUS - "Shake" - INSTALLATION CHECK
  7341.     AX = 4203h
  7342. Return: AX = 1234h if resident
  7343. SeeAlso: AX=3DFFh,AX=4243h
  7344. --------v-214243-----------------------------
  7345. INT 21 - VIRUS - "Invader" - INSTALLATION CHECK
  7346.     AX = 4243h
  7347. Return: AX = 5678h if resident
  7348. SeeAlso: AX=4203h,AX=44A0h,AX=4B04h
  7349. --------D-214300-----------------------------
  7350. INT 21 - DOS 2+ - GET FILE ATTRIBUTES
  7351.     AX = 4300h
  7352.     DS:DX -> ASCIZ filename
  7353. Return: CF clear if successful
  7354.         CX = file attributes (see #1073)
  7355.         AX = CX (DR DOS 5.0)
  7356.     CF set on error
  7357.         AX = error code (01h,02h,03h,05h) (see #1332 at AH=59h)
  7358. Notes:    under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
  7359.     under DR DOS 3.41 and 5.0, attempts to change the subdirectory bit are
  7360.       simply ignored without an error
  7361. BUG:    Windows for Workgroups returns error code 05h (access denied) instead
  7362.       of error code 02h (file not found) when attempting to get the
  7363.       attributes of a nonexistent file.  This causes open() with O_CREAT
  7364.       and fopen() with the "w" mode to fail in Borland C++.
  7365. SeeAlso: AX=4301h,AX=4310h,AX=7143h,AH=B6h,INT 2F/AX=110Fh,INT 60/DI=0517h
  7366. --------D-214301-----------------------------
  7367. INT 21 - DOS 2+ - "CHMOD" - SET FILE ATTRIBUTES
  7368.     AX = 4301h
  7369.     CX = new file attributes (see #1073)
  7370.     DS:DX -> ASCIZ filename
  7371. Return: CF clear if successful
  7372.         AX destroyed
  7373.     CF set on error
  7374.         AX = error code (01h,02h,03h,05h) (see #1332 at AH=59h)
  7375. Notes:    will not change volume label or directory attribute bits, but will
  7376.       change the other attribute bits of a directory (the directory
  7377.       bit must be cleared to successfully change the other attributes of a
  7378.       directory, but the directory will not be changed to a normal file as
  7379.       a result)
  7380.     MS-DOS 4.01 reportedly closes the file if it is currently open
  7381.     for security reasons, the Novell NetWare execute-only bit can never
  7382.       be cleared; the file must be deleted and recreated
  7383.     under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
  7384.     DOS 5.0 SHARE will close the file if it is currently open in sharing-
  7385.       compatibility mode, otherwise a sharing violation critical error is
  7386.       generated if the file is currently open
  7387.     DR DOS 3.41/5.0 will silently ignore attempts to change the 'directory'
  7388.       attribute bit
  7389. SeeAlso: AX=4300h,AX=4311h,AX=7143h,INT 2F/AX=110Eh
  7390.  
  7391. Bitfields for file attributes:
  7392. Bit(s)    Description    (Table 1073)
  7393.  7    shareable (Novell NetWare)
  7394.  6    unused
  7395.  5    archive
  7396.  4    directory
  7397.  3    volume label
  7398.     execute-only (Novell NetWare)
  7399.  2    system
  7400.  1    hidden
  7401.  0    read-only
  7402. --------D-214302-----------------------------
  7403. INT 21 - MS-DOS 7 - GET COMPRESSED FILE SIZE
  7404.     AX = 4302h
  7405.     DS:DX -> ASCIZ pathname for file or directory
  7406. Return: CF clear if successful
  7407.         ??? = compressed size of file/directory in bytes
  7408.     CF set on error
  7409.         AX = error code
  7410. Note:    on volumes which do not support compression, the returned size is the
  7411.       actual file size rounded up to the next cluster boundary
  7412. SeeAlso: AH=71h,AH=72h
  7413. --------O-214302-----------------------------
  7414. INT 21 - DR DOS 3.41+ internal - GET ACCESS RIGHTS
  7415.     AX = 4302h
  7416.     DS:DX -> ASCIZ pathname
  7417. Return: CF clear if successful
  7418.         CX = access rights (see #1074)
  7419.         AX = CX (DR DOS 5.0)
  7420.     CF set on error
  7421.         AX = error code
  7422. Desc:    Determine which operations the calling program may perform on a
  7423.       specified file without being required to provide a password.
  7424. Notes:    this protection scheme has been coordinated on all current Digital
  7425.       Research/Novell operating systems (DR DOS 3.41+, DRMDOS 5.x, and
  7426.       FlexOS 2+)
  7427.     this function is documented in DR DOS 6.0 and corresponds to the
  7428.       "Get/Set File Attributes" function, subfunction 2, documented in
  7429.       Concurrent DOS.
  7430.     only FlexOS actually uses the "execution" bits; DR DOS 3.41+ treats
  7431.       them as "read" bits.
  7432.     DR DOS 3.41-5.x only use bits 0-3.  Only DR DOS 6.0 using a
  7433.       DRMDOS 5.x security system allowing for users and groups uses bits
  7434.       4-11.
  7435. SeeAlso: AX=4303h
  7436.  
  7437. Bitfields for DR DOS file access rights:
  7438. Bit(s)    Description    (Table 1074)
  7439.  0    owner delete requires password
  7440.  1    owner execution requires password (FlexOS)
  7441.  2    owner write requires password
  7442.  3    owner read requires password
  7443.  4    group delete requires password
  7444.  5    group execution requires password (FlexOS)
  7445.  6    group write requires password
  7446.  7    group read requires password
  7447.  8    world delete requires password
  7448.  9    world execution requires password (FlexOS)
  7449.  10    world write requires password
  7450.  11    world read requires password
  7451. --------O-214303-----------------------------
  7452. INT 21 - DR DOS 3.41+ internal - SET ACCESS RIGHTS AND PASSWORD
  7453.     AX = 4303h
  7454.     CX = access rights
  7455.          bits 11-0: access rights (see #1074)
  7456.          bit 15: new password is to be set
  7457.     DS:DX -> ASCIZ pathname
  7458.     [DTA] = new password if CX bit 15 is set (blank-padded to 8 characters)
  7459. Return: CF clear if successful
  7460.     CF set on error
  7461.         AX = error code
  7462. Notes:    if the file is already protected, the old password must be added after
  7463.       the pathname, separated by a ";"
  7464.     this function is documented in DR DOS 6.0 and corresponds to the
  7465.       "Get/Set File Attributes" function, subfunction 3, documented in
  7466.       Concurrent DOS.
  7467. SeeAlso: AH=0Fh,AH=17h,AX=4302h"DR DOS",AX=4305h,AX=4454h
  7468. --------O-214304-----------------------------
  7469. INT 21 U - DR DOS 5.0-6.0 internal - GET ENCRYPTED PASSWORD
  7470.     AX = 4304h
  7471.     DS:DX -> ASCIZ filename
  7472.     ???
  7473. Return: CF clear if successful
  7474.         CX = AX = 0000h if no password assigned to file
  7475.     CF set on error
  7476.         AX = error code (see #1332 at AH=59h/BX=0000h)
  7477. Note:    this function is only supported by DR DOS 5.0 and 6.0 and DRMDOS 5.1
  7478. SeeAlso: AX=4303h,AX=4305h
  7479. --------O-214305-----------------------------
  7480. INT 21 U - DR DOS 5.0-6.0 internal - SET EXTENDED FILE ATTRIBUTES
  7481.     AX = 4305h
  7482.     DS:DX -> ASCIZ filename
  7483.     ???
  7484. Return: CF clear if successful
  7485.     CF set on error
  7486.         AX = error code (see #1332 at AH=59h/BX=0000h)
  7487. Desc:    this function allows the extended attributes, and optionally the
  7488.       encrypted password, of a file to be set.
  7489. Note:    this function is only supported by DR DOS 5.0 and 6.0 and DRMDOS 5.1
  7490. SeeAlso: AX=4304h,AX=4311h
  7491. --------O-214306-----------------------------
  7492. INT 21 - DR DOS 6.0 - GET FILE OWNER
  7493.     AX = 4306h
  7494.     DS:DX -> ASCIZ filename
  7495. Return: CF clear if successful
  7496.         AX = CX = value set with AX=4307h
  7497.     CF set on error
  7498.         AX = error code (see #1332 at AH=59h/BX=0000h)
  7499. SeeAlso: AX=4307h
  7500. --------O-214307-----------------------------
  7501. INT 21 - DR DOS 6.0 - SET FILE OWNER
  7502.     AX = 4307h
  7503.     CX = ??? (owner identification number?)
  7504.     DS:DX -> ASCIZ filename
  7505. Return: CF clear if successful
  7506.     CF set on error
  7507.         AX = error code (see #1332 at AH=59h/BX=0000h)
  7508. SeeAlso: AX=4306h
  7509. --------N-214310-----------------------------
  7510. INT 21 - Banyan VINES 2.1+ - GET EXTENDED FILE ATTRIBUTES
  7511.     AX = 4310h
  7512.     DS:DX -> ASCIZ filename
  7513. Return: CF clear if successful
  7514.         CH = attributes (see #1075)
  7515.     CF set on error
  7516.         AX = error code (01h,02h,03h,05h) (see #1332 at AH=59h/BX=0000h)
  7517. Note:    the filename may be a directory but must be on a VINES file service
  7518. SeeAlso: AX=4300h,AX=4311h,AH=B6h,INT 2F/AX=110Fh
  7519. --------N-214311-----------------------------
  7520. INT 21 - Banyan VINES 2.1+ - SET EXTENDED FILE ATTRIBUTES
  7521.     AX = 4311h
  7522.     CH = new attributes (see #1075)
  7523.     DS:DX -> ASCIZ filename
  7524. Return: CF clear if successful
  7525.     CF set on error
  7526.         AX = error code (01h,02h,03h,05h) (see #1332 at AH=59h/BX=0000h)
  7527. Note:    the filename may be a directory but must be on a VINES file service
  7528. SeeAlso: AX=4301h,AX=4305h,AX=4310h,INT 2F/AX=110Eh
  7529.  
  7530. Bitfields for VINES extended file attributes:
  7531. Bit(s)    Description    (Table 1075)
  7532.  7    unused
  7533.  6    shareable
  7534.  5    execute-only
  7535.  4-0    unused
  7536. --------u-214321BX0000-----------------------
  7537. INT 21 - Q87, Q387 - INSTALLATION CHECK
  7538.     AX = 4321h
  7539.     BX = 0000h
  7540.     EAX = 87654321h (entire EAX value is required, not just AX)
  7541. Return: EAX = 12345678h if installed
  7542. Program: Q387 (renamed to Q87 as of v3.7) is a math coprocessor emulator from
  7543.       Quickware
  7544. Note:    this function is available only in virtual-86 mode in older versions;
  7545.       newer versions also provide it in MS Windows 16- and 32-bit protected
  7546.       mode
  7547. SeeAlso: AX=4321h/BX=0001h,AX=4321h/BX=0002h,INT 67/AX=4321h
  7548. --------u-214321BX0001-----------------------
  7549. INT 21 - Q87, Q387 - ENABLE EMULATOR
  7550.     AX = 4321h
  7551.     BX = 0001h
  7552.     EAX = 87654321h (entire EAX value is required, not just AX)
  7553. Desc:    enable the emulator by setting the CPU MSW's EM bit and updating
  7554.       the BIOS equipment list
  7555. Note:    this function is available only in virtual-86 mode in older versions;
  7556.       newer versions also provide it in MS Windows 16- and 32-bit protected
  7557.       mode
  7558. SeeAlso: AX=4321h/BX=0000h,AX=4321h/BX=0002h
  7559. --------u-214321BX0002-----------------------
  7560. INT 21 - Q87, Q387 - DISABLE EMULATOR
  7561.     AX = 4321h
  7562.     BX = 0002h
  7563.     EAX = 87654321h (entire EAX value is required, not just AX)
  7564. Desc:    disable the emulator by clearing the CPU MSW's EM bit and updating
  7565.       the BIOS equipment list
  7566. Note:    this function is available only in virtual-86 mode in older versions;
  7567.       newer versions also provide it in MS Windows 16- and 32-bit protected
  7568.       mode
  7569. SeeAlso: AX=4321h/BX=0000h,AX=4321h/BX=0001h
  7570. --------O-214380-----------------------------
  7571. INT 21 - Novell DOS 7 - UNDELETE PENDING DELETE FILE
  7572.     AX = 4380h
  7573.     ???
  7574. Return: ???
  7575. SeeAlso: AH=41h,AX=4381h
  7576. --------O-214381-----------------------------
  7577. INT 21 - Novell DOS 7 - PURGE PENDING DELETE FILE
  7578.     AX = 4381h
  7579.     ???
  7580. Return: ???
  7581. SeeAlso: AH=41h,AX=4380h
  7582. --------!---Section--------------------------
  7583.